Python可变参数函数用法详解

许多编程语言允许定义可变参数的数量,以便在调用函数时传输任何多个参数。Python 当然也不例外,Python 允许在形参前添加一个星号(*),这意味着该参数可以接收多个参数值,多个参数值可以作为元组传输。
以下程序定义了一个可变的形参数函数:
#定义了支持参数收集的函数 deftest(a,*books): print(books) #books被用作元组 forbinbooks: print(b) #输出整数变量a的值 print(a) #调用test()函数 test(5,"php中文网","Python教程")
操作上述程序,将看到以下操作结果:
('php中文网','Python教程')
php中文网
Python教程
5从上述操作结果可以看出,当调用时 test() 函数时,books 参数可以作为参数值传入多个字符串。从 test() 根据函数体代码,参数收集的本质是一个元组: Python 会将传给 books 参数的多个值收集成一个元组。 Python 允许个数可变的形参可以在形参列表的任何位置(不要求是形参列表的最后一个参数),但是 Python 支持“普通”参数收集的形参最多需要一个函数。例如,以下程序: 正如上述程序所看到的,test() 函数的第一个参数是可变形参数。由于该参数可以接收不同数量的参数值,因此如果需要将参数值传输到以下参数,则必须使用关键字参数,否则该程序将传输的多个值视为传输 books 参数的。 Python 此时还可以收集关键字参数, Python 这个关键字参数将被收集成字典。为了让它变成字典。 Python 为了收集关键字参数,需要在参数前添加两个星号。在这种情况下,一个函数可以包含一个支持“普通”参数和一个支持关键字参数收集的参数。例如,以下代码: 上述程序正在调用中 test() 函数时,前面的 1、2、3 它将传递给普通参数 x、y、z;接下来的两个字符串将由 books 参数收集成元组;最后两个关键字参数将被收集成字典。操作上述代码,您将看到以下输出结果: 对上述定义方法的定义 test() 函数,参数 z 默认值几乎不起作用。例如,以下方式调用 test() 函数: 如果希望让 z 如果参数的默认值发挥作用,则只需要输入两个位置参数。例如,调用代码如下:#定义了支持参数收集的函数
deftest(*books,num):
print(books)
#books被用作元组
forbinbooks:
print(b)
print(num)
#调用test()函数
test("php中文网","Python教程",num=20)#定义了支持参数收集的函数
deftest(x,y,z=3,*books,**scores):
print(x,y,z)
print(books)
print(scores)
test(1,2,3,"php中文网","Python教程",语文=89,数学=94)
123
('php中文网','Python教程')
{'语文':89,'数学':94}test(1,2,"php中文网","Python教程",语文=89,数学=94)
test(1,2,语文=89,数学=94)
