【李刚-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