函数-Ⅲ
>>> # 收集参数>>> # 当我们在定义一个函数的时候,假如需要传入的参数的个数是不确定的,按照一般的写法可能需要定义很多个相同的函数然后指定不同的参数个数,这显然是很麻烦的,不能根本解决问题。
>>> # 定义收集参数其实也很简单,即使在形参的前面加上星号(*)来表示:
>>> def myfunc(*args):
... print("有%d个参数。" % len(args))
... print("第二个参数是: %s " % args)
...
>>> myfunc("小甲鱼", "不二如是")
有2个参数。
第二个参数是: 不二如是
>>> myfunc(1, 2, 3, 4, 5)
有5个参数。
第二个参数是: 2
>>> # 如果在收集参数后面还需要指定其它参数,那么在调用函数的时候就应该使用关键参数来指定后面的参数:
>>> def myfunc(*args, a, b):
... print(args, a, b)
...
>>> myfunc(1, 2, 3, a=4, b=5)
(1, 2, 3) 4 5
>>> # 除了可以将多个参数打包为元组,收集参数其实还可以将参数们打包为字典,做法呢,是使用连续的两个星号(**)
>>> def myfunc(**kwargs):
... print(kwargs)
...
>>> # 对于这种情况,在传递参数的时候就必须要使用关键字参数了,因为字典的元素都是键值对嘛,所以等号(=)左侧是键,右侧是值:
>>> myfunc(a=1, b=2, c=3)
{'a': 1, 'b': 2, 'c': 3}
>>># 混合使用
>>> def myfunc(a, *b, **c):
... print(a, b, c)
...
>>> myfunc(1, 2, 3, x=4, y=5)
1 (2, 3) {'x': 4, 'y': 5}
>>> # 解包参数
>>> # 这一个星号(*)和两个星号(**)不仅可以用在函数定义的时候,在函数调用的时候也有特殊效果,在形参上使用称之为参数的打包,在实参上的使用,则起到了相反的效果,即解包参数:
>>> args = (1, 2, 3, 4)
>>> def myfunc(a, b, c, d):
... print(a, b, c, d)
...
>>> myfunc(*args)
1 2 3 4
>>> args = {'a':1, 'b':2, 'c':3, 'd':4}
>>> myfunc(**args)
1 2 3 4
页:
[1]