1.关键字参数
关键字参数可以传入0或者多个参数名的参数,这些参数在函数定义中并没有出现,这些参数在函数内部自动封装集成一个字典(dict),通常来讲关键字参数是放在函数参数列表的最后,通过一个demo代码来看:
def write_msg(id, **kwargs):
msg = {
'id': id,
'name': None,
'age': None,
'sex': None,
'city': None
}
for key, val in kwargs.items():
msg[key] = val
return msg
**kwargs在函数内部是一个字典,我们可以对这个字典进行迭代,取出函数的键(key)和值(value),对上面的demo测试如下:
bruce_msg = write_msg(1, name='Bruce', age=26, sex='male', city='guangzhou')
lily_msg = write_msg(2, name='Lily', age=26, sex='female', city='zhongshan')
tom_msg = write_msg(2, name='Tom', age=30, sex='male', city='shanghai', post='engineer')
print(bruce_msg)
print(lily_msg)
print(tom_msg)
none_msg = write_msg(3)
print(none_msg)
结果:
{'id': 1, 'name': 'Bruce', 'age': 26, 'sex': 'male', 'city': 'guangzhou'}
{'id': 2, 'name': 'Lily', 'age': 26, 'sex': 'female', 'city': 'zhongshan'}
{'id': 2, 'name': 'Tom', 'age': 30, 'sex': 'male', 'city': 'shanghai', 'post': 'engineer'}
{'id': 3, 'name': None, 'age': None, 'sex': None, 'city': None}
2.可变参数
函数的可变参数所传入的内容个数是可以变化的,可以是1个,2个到任意个。使用可变参数可以很好的解决参数灵活变化的问题,单有一点需要注意,可变参数在函数定义时出现在在特定参数和默认参数面前,因为可变参数会覆盖掉这些参数,来看一个demo:
def compute_type(type, *args):
val = 0
if type == 'add':
for arg in args:
val += arg
return val
elif type == 'multi':
val = 1
for arg in args:
val *= arg
return val
else:
print('not support this type compute!')
大行调用compute_type的时候,除了特定参数type,后面传入的参数都会被识别为可变参数,可变参数args亦是一个可迭代的对象,对demo测试如下:
add_num = compute_type('add', 1,2,3,4,5,6,7,8,9,10)
print('add:', add_num)
multi_num = compute_type('multi', 1,2,3,4,5,6,7,8,9)
print('multi:', multi_num)
结果:
add: 55
multi: 362880