很多编程语言都允许定义数量可变的参数,这样调用函数时可以传入任意数量的参数。 Python当然也不例外。 Python允许在形参前加星号(*),表示该形参可以接收多个参数值,多个参数值以元组形式传入。
下面程序定义了一个形参个数可变的函数:
# 定义了支持参数收集的函数
def test(a, *books) :
print(books)
# books被当成元组处理
for b in books :
print(b)
# 输出整数变量a的值
print(a)
# 调用test()函数
test(5 , "php中文网" , "Python教程")
运行上面程序,将看到如下运行结果:
('php中文网', 'Python教程')
php中文网
Python教程
5
从上面的运行结果可以看出,调用test()函数时,books参数可以传入多个字符串作为参数值。从test()的函数体代码来看,参数收集的本质是一个元组:Python会将传递给books参数的多个值收集到一个元组中。
Python 允许在形参列表的任意位置有可变数量的形参(不需要是形参列表的最后一个参数),但是 Python 要求一个函数最多只能取一个形参,该形参支持“正常”参数集合。例如,下面的程序:
# 定义了支持参数收集的函数
def test(*books ,num) :
print(books)
# books被当成元组处理
for b in books :
print(b)
print(num)
# 调用test()函数
test("php中文网", "Python教程", num = 20)
从上面的程序可以看出,test()函数的第一个参数是一个可变数量的形参。由于该参数可以接收不同数量的参数值,如果需要传入后面的parameters参数值,必须使用关键字参数,否则程序会将传入的多个值视为传递给books参数。
Python 还可以收集关键字参数,在这种情况下,Python 会将这些关键字参数收集到字典中。为了让 Python 收集关键字参数,需要在它前面加上两个星号。在这种情况下,一个函数可以同时包含一个支持“普通”参数集合的参数和一个支持关键字参数集合的参数。例如下面的代码:
# 定义了支持参数收集的函数
def test(x, y, z=3, *books, **scores) :
print(x, y, z)
print(books)
print(scores)
test(1, 2, 3, "php中文网" , "Python教程", 语文=89, 数学=94)
上面程序调用test()函数时,会将前面的1、2、3传递给普通参数x、y、z;接下来的两个字符串将被 books 参数收集到元组中;最后两个关键字参数将作为字典收集。运行上面的代码,你将看到以下输出:
1 2 3
('php中文网', 'Python教程')
{'语文': 89, '数学': 94}
对于上述方式定义的test()函数,参数z的默认值影响不大。例如,调用 test() 函数如下:
test(1, 2, "php中文网" , "Python教程", 语文=89, 数学=94)
如果你想让z参数的默认值起作用,你只需要传入两个位置参数。例如调用代码如下:
test(1, 2, 语文=89, 数学=94)
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python中的Box-Cox变换是什么09/28
- ♥ python语言中的注释是什么09/17
- ♥ 如何退出python多线程编程09/28
- ♥ 如何循环嵌套在python中12/24
- ♥ 如何在 python 中安装和使用 Graphviz?10/10
- ♥ python中defaultdict的初始化12/16
内容反馈