个性化阅读
专注于IT技术分析

python3 函数参数 – Python3教程

点击下载

上一章Python教程请查看:python3 函数

在Python中,可以定义接受可变数量参数的函数,在本文中,你将学习如何使用default、关键字和任意参数定义这样的函数。

参数

在用户定义函数主题中,我们学习了如何定义函数并调用它,否则函数调用将导致错误。这里有一个例子。

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

赞(0)
未经允许不得转载:srcmini » python3 函数参数 – Python3教程

评论 抢沙发

评论前必须登录!