* 和 ** 使用在函数中,可以时是函数可以接受任意多的参数,也就时收集参数的作用。
1. * 的使用
函数参数中使用一个星号的目的时收集多余的位置参数,如果没有多余的参数收集,带星号的参数就是 个空元组。
另外对于函数调用的地方使用星号,是参数收集的逆过程,使用时不是要收集参数,而是函数执行中进行参数分配
实例:
def printInfo(name, *others):
print(name)
# others is one Tuple
print(others)
printInfo('devin')
print('*' * 20)
printInfo('devin', 25, 'male')
print('-' * 20)
info = ('devin', 25, 'male')
printInfo(*info)
输出结果:
devin
()
********************
devin
(25, 'male')
--------------------
devin
(25, 'male')
2. ** 的使用
函数参数中使用双星号(**)的目的处理关键字参数的收集操作,返回的时字典而不是元组
同样,在调用函数时使用 **来进行字典参数的传递,可以实现在函数体中进行参数的分配-参数收集的逆过程。
实例:
def printInfo(name, *param1, **param2):
print(name)
print(param1)
print(param2)
printInfo('Devin', 25, 'male', role='freedom', hope='peace')
print('=' * 40)
def printInfo2(name, age):
print(name)
print(age)
info = {'name': 'devin', 'age': 'peace'}
printInfo2(**info)
输出结果:
Devin
(25, 'male')
{'role': 'freedom', 'hope': 'peace'}
========================================
devin
peace