【李刚-21天通关Python-18】之 参数收集和逆向参数收集

【李刚-21天通关Python-18】之 参数收集和逆向参数收集

一、普通参数收集

  • 在形参前面添加一个星号(“ * ”),这样就意味着该参数可接收多个参数值,多个参数值被当作元组传入
  • 参数收集的本质就是一个元组:Python会将传给带“*”参数的多个值收集成一个元组
  • Python允许个数可变的形参可以处于形参列表的任意位置,但最多只能带一个支持普通参数收集的形参
  • 如果支持普通参数收集的形参位于前面,后面参数则需要使用关键字参数传值
def test (num, *books):
    print("num: ", num)
    print("books: ", books)

test(3, 'python', 'java', 'cpp')
# num: 3
# books: ('python', 'java', 'cpp')
def info (*names, msg):
    for name in names:
        print("%s, %s" % (name, msg))

info('孙悟空', '猪八戒', '牛魔王', msg='欢迎大家')
# 孙悟空,欢迎大家
# 猪八戒,欢迎大家
# 牛魔王,欢迎大家

二、关键字参数收集

  • 在参数前面添加两个星号,该参数支持关键字参数收集,收集的参数被当成dict处理
  • 一个函数可同时支持普通参数收集和关键字参数收集
def test (num, *books, **scores):
    print("num: ", num)
    print("books: ",books)
    print("scores: ", scores)

test(5, 'python', 'java', 'cpp', 语文=90, 数学=100)
# num: 5
# books: ('python', 'java', 'cpp')
# scores: {'语文':90, '数学':100}
def info (*names, msg, **scores):
    for name in names:
        print("%s, %s" % (name, msg))
    print(scores)

# dict的参数收集:只收集不能明确传入的关键字参数
info('孙悟空', '猪八戒', '牛魔王', msg='欢迎大家', 语文=90, 数学=100)
# 孙悟空,欢迎大家
# 猪八戒,欢迎大家
# 牛魔王,欢迎大家
# {'语文':90, '数学':100}

三、逆向参数收集

  • 逆向参数收集:在元组、列表前添加“*”,在字典之前添加“**”
  • 即使是支持收集的参数,如果程序需要将一个元组传给该参数,同样需要使用逆向收集
def test (a, b):
    print(a)
    print(b)

vals = (20, 40)
msgs = ['aa', 'bb']
dicts = {'a': 80, 'b': 90}
# *对元组进行解包(逆向参数收集)
test(*vals)
# 20
# 40
test(*msgs)
# aa
# bb
test(**dicts)
# 80
# 90

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值