【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参数:fkit
nums参数:(123

如果不使用逆向收集,整个元组将作为一个参数

foo(my_tuple)

#输出
name参数:(123)
nums参数:()

字典也支持逆向收集,字典将会以关键字的形式传入。

def bar(book, price, desc):
    print(book, '这本书的价格是:', price)
    print('描述信息:', desc)

my_dict = {'price':89, 'book':'疯狂python讲义', 'desc':'这是一本系统全面的python学习图书'}
bar(**mydict)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值