做一个简单、明亮、快乐的手艺人。
函数参数解包(Function Argument Unpacking)是在函数传参时将iterable参数对象中的元素解包出来的一种技术。
想象一个场景,当函数所有实参保存在一个 tuple 或者 list 中时,如何优雅传参?
def print_info(name, age, sex):
print('Name = {0}; Age = {1}; Sex = {2}'.format(name, age, sex))
list_info = ['Luke', '42', 'Male']
tuple_info = ('Luke', '42', 'Male')
如果不使用函数参数解包技术,写法如下
print_info(list_info[0], list_info[1], list_info[2])
print_info(tuple_info[0], tuple_info[1], tuple_info[2])
当然任何一个有自我修养的程序员都不会对这种写法满意,幸运的是Python的设计者们已经为我们提供给了一个优雅的方案。
print_info(*list_info)
print_info(*tuple_info)
这就是函数参数解包,对iterable object 进行unpack,并将所有元素作为参数传递给被调用函数。
除了tuple、list、generators之外,实践中也常出现对dictionary的解包,字典的解包较为有趣。由于字典中元素是key/value pair,因此使用 * 或 ** 对字典进行解包得到的结果不同。
dic = {'name':'luke', 'age':'42', 'sex':'male'}
**dic ==> 'luke', '42', 'male'
*dic ==> 'name', 'age', 'sex'
晚安。