python3 函数参数 – Python3教程

上一章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循环来检索所有的参数。

    推荐阅读