【python】参数收集与逆向参数收集
【python】参数收集与逆向参数收集
参数收集
python中允许在形参前面添加一个星号(*),这样就意味着该参数可接收多个参数值,多个参数值被当成元组传入。
def test(a, *books): print(books) #books被当成元组处理 for b in books: print(b) #输出整数变量a的值 print(a)# 调用test()函数test(5, ‘疯狂IOS讲义‘, ‘疯狂Android讲义‘)
python允许个数可变的形参处于形参列表的任意位置,不一定是形参列表的最后一个参数,但当不位于形参列表的最后一位时,其余参数应当使用关键字参数形式传入。
def test(*books, num): print(books) #books被当成元组处理 for b in books: print(b) #输出整数变量a的值 print(num)# 调用test()函数test(‘疯狂IOS讲义‘, ‘疯狂Android讲义‘, num=20)
python还可以收集关键字参数,此时python会将这种关键字参数收集成字典,为了让python接收关键字参数,需要在参数前面添加两个星号。在这种情况下,一个函数可同时包含一个支持普通参数收集的参数和一个支持关键字参数收集的参数。
def test(x, y, z=3, *books, **scores): print(x, y, z) print(books) print(scores)?test(1, 2, 3, ‘疯狂python讲义‘, ‘疯狂java讲义‘, 语文=89, 数学=94)
输出结果如下:
1 2 3(‘疯狂python讲义‘,‘疯狂java讲义‘){‘语文‘:89,‘数学‘:94}
逆向参数收集
所谓逆向参数收集,指的是在程序已有列表、元组、字典等对象的前提下,把它们的元素“拆开”后传给函数的参数。
逆向参数收集需要在传入的列表、元组参数之前添加一个星号,在字典参数之前添加两个星号。
def test(name, message): print(‘用户是:‘, name) print(‘欢迎消息:‘, message)?my_list = [‘孙悟空‘, ‘欢迎来到水帘洞‘]test(*my_list)
实际上,即使是支持收集的参数,如果程序需要将一个元组传给该参数,那么同样需要使用逆向收集,例如以下代码:
def foo(name, *nums): print(‘name参数:‘, name) print(‘nums参数:‘, nums)?my_tuple = (1, 2, 3)foo(‘fkit‘, *my_tuple)
输出如下:
name参数:fkitnums参数:(1,2,3)
如果不使用逆向收集,整个元组将作为一个参数
foo(my_tuple)?#输出name参数:(1,2,3)nums参数:()
字典也支持逆向收集,字典将会以关键字的形式传入。
def bar(book, price, desc): print(book, ‘这本书的价格是:‘, price) print(‘描述信息:‘, desc)?my_dict = {‘price‘:89, ‘book‘:‘疯狂python讲义‘, ‘desc‘:‘这是一本系统全面的python学习图书‘}bar(**mydict)