通常情况下, 定义函数的时候, 我们只能定义有限的形参个数, 实参个数通常情况下也要和形参来定义.
如果我们想传递任意多个参数给函数, 只能把这些参数先封装到一个列表或元组中, 然后再传进去. 比较麻烦.
python 提供了可变参数, 可以接受任意多个参数, 然后函数内部会自动的把这些参数封装在一个元组中, 供函数内部使用.
可变参数基本使用
在形参前面添加一个 *
号, 这样的参数就是可变参数, 可以接受任意多个参数.
def foo(a, *b): # b 就是可变参数, 在函数内部可以作为元组使用
print(a)
print(b)
foo(10, 20, 4, 7, 9)
注意:
函数的形参中最多只能定义一个可变参数, 定义多个可变参数会出现语法错误.
可变参数一般作为形参中的最后一个参数.
如果可变参数不是最后一参数, 则给可变参数后的参数赋值的时候只能使用关键字参数赋值(下节学习)
def foo(a, *b, c):
print(a)
print(b)
print(c)
foo(10, 20, 4, 7, 9, c=90)
给可变参数传递列表和元组
我们已经知道可变参数能够接受任意多的参数, 用起来确实很爽.
但是, 如果我们手里已经有了列表或数组类型的数据, 如何传递给可变参数呢?难道要手动拆开一个一个的传?list[0], list[1],...
当然没有这么麻烦, 只要在列表或元组的前面添加一个*
, 则 python 会自动把他们拆开传递给可变参数.
def foo(a, *b, c):
print(a)
print(b)
print(c)
nums = [20, 40, 6]
foo(*nums, c=50) # python 自动拆开列表, 把列表中的元素传递给函数