zoukankan      html  css  js  c++  java
  • python基础(二)--多值参数以及类

    1.多值参数函数

    def 函数名(*args , **kwargs):

          .......

    多值参数函数顾名思义能够传入多个参数,args表示传入的元组,kwargs表示传入的字典

    
    
    def function(*args, **kwargs):
    print(args)
    print(kwargs)
       return

    function(1, 2, 3, 4, 5, 6) # 只是传入元组数据 function(name="sddd", age=18) # 传入字典数据 function(1, 2, 3, 4, 5, 6, name="sddd", age=18) # 传入元组与字典数据

    字典数据要保持key=xxx的形式,不然函数会默认为是元组

    1 function(1, 2, 3, 4, 5, 6, { "name": "sddd", "age": 18 })  # 此时传入的都是元组数据

    那么如何通过定义的元组和字典来进行传值呢
    这里采用拆包方式

    num = (1, 2, 3, 4)
    people = {"name": "sddd",
    "age": 18 }

    function(*num, *num, **people)

    可以看到变量前加上*就表示是元组,**表示字典,这样能够将传入的元组、字典自动拆成一个个参数,同时还不会导致将字典放到元组中
    多值参数在定义一些运用比较广泛的函数定义上有着巨大的优点,同时很多大牛的框架上也会用到这些方法

    2.类

     1 class Gun:
     2 
     3     def __init__(self, type, count):
     4         """初始化类的属性"""
     5 
     6         self.type = type
     7         self.count = count
     8         return
     9 
    10     def __str__(self):
    11         """重写print(对象)的打印效果"""
    12 
    13         return "%s 有 %d个子弹!" % (self.type, self.count)
    14 
    15     def attack(self):
    16         """射击"""
    17 
    18         self.count -= 1
    19         print("哒哒哒。。。")
    20         return
    21 
    22     def rebuild(self, num):
    23         """装填子弹"""
    24 
    25         self.count = num
    26         print("子弹已装满")
    27         return
    28 
    29 
    30 class Soldier:
    31 
    32     def __init__(self, name):
    33         """初始化士兵类数据"""
    34 
    35         self.name = name
    36         self.gun = None
    37         return
    38 
    39     def __str__(self):
    40         """重写print(对象)的打印效果"""
    41 
    42         if self.gun is None:
    43             return "%s没有枪" % self.name
    44         else:
    45             return "%s有%s" % (self.name, self.gun.__str__())
    46 
    47 
    48 
    49     def getGun(self,gun):
    50 
    51         self.gun = gun
    52 
    53     def attack(self):
    54         """攻击"""
    55         if self.gun is None:
    56             print("%s还没装备武器" % self.name)
    57         else:
    58             self.gun.attack()
    59         return
    60 
    61     def rebuild(self, num):
    62         """装填"""
    63         if self.gun is None:
    64             print("%s还没装备武器" % self.name)
    65         else:
    66 
    67             self.gun.rebuild(50)
    68         return
    69 
    70 
    71 gun = Gun("AK", 50)
    72 
    73 sol = Soldier("TOM")
    74 
    75 sol.getGun(gun)
    76 
    77 sol.attack()
    78 
    79 sol.rebuild(50)
    80 
    81 print(sol)
    82 
    83 print(gun)
    View Code

    这里简单的实现了士兵类与枪支类的操作
    类定义时关键字class + 类名 + :
    里面的方法与定义 函数的格式是一样的,在创建方法时,会默认有一个self参数,这个表示当前对象,不需要传入值
    每个类中的方法都分为两种,一种是系统预留的,一种是自己创建的。预留的方法普遍以(_ _init_ _)两个下划线开始,两个下划线结束
    下面列举几个简单的方法:
    __init__(self):初始化方法,对象创建时默认调用
    __str__(self):打印对象的信息,采用print(对象名)使用
    __del__(self):删除对象,在对象生命周期结束时调用
    在类中,初始化方法时创建类的数据类型,当然例子中创建的是公有的变量,私有变量需要加上两个下划线如:self.__name = name。注:python中的私有不是绝对的私有,可以强制调用
    在方法中调用属性时,不能简单的通过名称访问,需要通过当前对象即self访问,格式self.xxxx
    注意点:判断python对象是否为空时,采用xx is None来判断

  • 相关阅读:
    二叉树的最大深度
    [CSP-S模拟测试]:飘雪圣域(莫队)
    [CSP-S模拟测试]:玩具(概率DP)
    [CSP-S模拟测试]:梦境(贪心+小根堆)
    [CSP-S模拟测试]:小P的生成树(数学+Kruskal)
    [CSP-S模拟测试]:小P的单调数列(树状数组+DP)
    [CSP-S模拟测试]:小P的2048(模拟)
    [CSP-S模拟测试]:简单的操作(二分图+图的直径)
    [CSP-S模拟测试]:简单的期望(DP)
    [CSP-S模拟测试]:简单的序列(DP)
  • 原文地址:https://www.cnblogs.com/lisd/p/9441165.html
Copyright © 2011-2022 走看看