Python 函数参数
Jinku Hu
2023年1月30日
在本节中,我们将来学习 Python 函数参数,及其不同类型的参数,例如默认参数,关键字参数和任意参数。
Python 函数参数
函数的参数是在函数内需要调用该函数时输入的值。当定义的函数具有指定数量参数,调用此特定函数时必须传递指定数量的参数。
如果传递的参数多于或少于函数定义中指定的参数,则会得到一个错误-TypeError
。
我们举下面的例子,
def language(p, n):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language("Python", 1)
language("Java", 2)
Programming language 1 is: Python
Programming language 2 is: Java
函数 language
有两个参数。如果调用函数时传递不同数量的参数,则会出现如下错误:
>>> language('Python')
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
language('Python')
TypeError: language() takes exactly 2 arguments (1 given)
>>> language(2, 'Python', 'Java')
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
language(2, 'Python', 'Java')
TypeError: language() takes exactly 2 arguments (3 given)
Python 函数参数类型
上面介绍的函数具有固定数量的参数。函数也可以有可变的参数,将可变参数传递给函数有三种不同的方法,现在我们来逐一介绍。
Python 函数默认参数
在函数中,参数可以有在函数定义中指定的默认值。如果参数有默认值,那么它是输入参数中可选的值。
我们先来看下面的例子,
def language(p="C++", n=3):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language()
Programming language 3 is: C++
你可以在看到这里没有传递任何输入参数,但程序仍然能运行,这是因为函数定义的时候提供了参数的默认值。如果你传入了这些默认参数的不同的值,则将覆盖默认值。
Python 函数关键字参数
通常情况下,你需要按照函数定义中定义的参数顺序来传递多个参数。但是如果使用关键字参数,则可以更改参数的位置。
下面的例子是顺序输入参数的情形,
def language(p, n):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language(p="C++", n=3)
Programming language 3 is: C++
如果使用关键字参数将值明确的赋给特定参数,那就可以更改参数的位置。比如,
def language(p, n):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language(n=3, p="C++")
Programming language 3 is: C++
Python 函数任意参数
假如事先不知道应该传递多少个参数,那可以来使用任意参数。任意参数在参数名称前用星号*
来表示。它将不是关键字参数的其他参数作为元组传递给函数。
def language(*args):
"""Demo function of arbitray arguments"""
for i in args:
print("Programming language:", i)
language("Java", "C++", "R", "Kotlin")
Programming language: Java
Programming language: C++
Programming language: R
Programming language: Kotlin
这个函数在调用的时候,传递了多个参数,这些参数在函数被真正调用前被转换成了一个元组。
双星号 **kwargs
是用来传递任意的关键字参数,比如,
def language(**kwargs):
"""Demo funciton of arbitrary keyword arguments"""
for a in kwargs:
print(a, kwargs[a])
language(country="NL", code="+31")
country NL
code +31
任意关键字参数中的参数是作为字典传递的,该字典的键是关键字,字典值是对应的参数的值。比如上面的示例中,传递的参数将转换为字典 {'country':"NL", 'code':"+31"}