上一章Python教程请查看:python3 函数
在Python中,可以定义接受可变数量参数的函数,在本文中,你将学习如何使用default、关键字和任意参数定义这样的函数。
参数【python3 函数参数 –
Python3教程】在用户定义函数主题中,我们学习了如何定义函数并调用它,否则函数调用将导致错误。这里有一个例子。
def greet(name,msg):
"""此函数向提供消息的人打招呼"""
print("Hello",name + ', ' + msg)greet("AA","Good morning!")
这里,函数greet()有两个参数。
因为我们用两个参数调用了这个函数,它运行得很顺利,我们没有得到任何错误。
如果我们用不同数量的参数调用它,解释器会报错。下面是对这个函数的调用,其中有一个参数,没有参数,还有各自的错误消息。
>>> greet("AAA")# 只有一个参数
TypeError: greet() missing 1 required positional argument: 'msg'>>> greet()# 无参数
TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'
函数的可变参数到目前为止,函数的参数数量是固定的,在Python中,还有其他方法来定义一个函数,该函数可以接受可变数量的参数。
下面描述了这种类型的三种不同形式。
Python默认参数函数参数在Python中可以有默认值。
我们可以使用赋值运算符(=)为参数提供一个默认值。这里有一个例子。
def greet(name, msg = "Good morning!"):
"""
函数作用说明
"""print("Hello",name + ', ' + msg)greet("BBB")
greet("CCC","MMM")
在这个函数中,参数名没有默认值,在调用期间是必需的(强制的)。
另一方面,参数msg带有默认值,因此,在调用期间它是可选的。如果提供了另外一个值,它将覆盖默认值。
函数中的任意数量的参数都可以有一个默认值,但是一旦我们有了一个默认参数,它右边的所有参数也必须有默认值。
这意味着,非默认参数不能跟随默认参数,例如,如果我们把上面的函数头定义为:
def greet(msg = "Good morning!", name):
我们会得到一个错误如下:
SyntaxError: non-default argument follows default argument
Python关键字参数当我们用一些值调用一个函数时,这些值会根据它们的位置分配给参数。
例如,在上面的函数greet()中,当我们调用它作为greet(“BBB”,“MMM”)时,值“BBB”被分配给参数名,类似地,“MMM”被分配给msg。
Python允许使用关键字参数调用函数。当我们以这种方式调用函数时,参数的顺序(位置)可以改变。对上述函数的调用都是有效的,并产生相同的结果。
>>> # 2关键字参数
>>> greet(name = "BBB",msg = "Blabla…")>>> # 2个关键字参数(顺序混乱)
>>> greet(msg = "Blabla",name = "BBB") >>> # 一个指定位置,一个指定关键字参数
>>> greet("CCCC",msg = "HHHHH")
可以看到,我们可以在函数调用期间将位置参数与关键字参数混合使用。但是我们必须记住,关键字参数必须跟随位置参数。
在关键字参数之后使用位置参数将导致错误。例如函数调用如下:
greet(name="CCC","MMMM")
会导致如下错误:
SyntaxError: non-keyword arg after keyword arg
Python变长参数有时,我们并不预先知道传递给函数的参数的数量,Python允许我们通过带有任意数量参数的函数调用来处理这种情况。
在函数定义中,我们在参数名之前使用星号(*)来表示这类参数,这里有一个例子。
def greet(*names):
"""函数说明文档"""# names是一个带有参数的元组
for name in names:
print("Hello",name)greet("AAA","BBB","CCC","DDD")
这里,我们调用了带有多个参数的函数,在传递到函数之前,这些参数被包装成一个元组,在函数内部,我们使用for循环来检索所有的参数。
推荐阅读
- python3 递归(递归函数) – Python3教程
- python3 函数 – Python3教程
- python3 pass语句 – Python3教程
- python3 break和continue语句 – Python3教程
- python3 while循环语句 – Python3教程
- python3 for循环语句 – Python3教程
- python3 if…else语句 – Python3教程
- python3名称空间和作用域 – Python3教程
- python3操作符 – Python3教程