本文实例讲述了Python函数参数操作。分享给大家供大家参考,具体如下:
简述
在 Python 中,函数的定义非常简单,满足对应的语法格式要求即可。对于调用者来说,只需关注如何传递正确的参数,以及获取相应的返回值就足够了,无需了解函数的内部实现(除非想学习、跟踪源码)。
话虽如此,但对于函数的定义来说,灵活性非常高。除了常规定义的必选参数以外,还支持默认参数、可变参数、以及关键字参数。这样以来,不但能处理复杂的参数,还可以简化调用者的代码。
形参和实参
不止 Python,几乎所有的编程语言都会涉及两个术语:parameter 和 argument。那么,它们之间究竟有什么区别呢?
parameter 是指函数定义中的参数,而 argument 指的是函数调用时的实际参数。
简略描述:parameter = 形参(formal parameter), argument = 实参(actual parameter)。
例如,定义一个简单的函数:
>>> def greet(param1, param2):
... pass
...
>>>
>>> greet('Hello', 'Python')
其中,param1 和 param2 是函数的形参,而在函数 greet() 被调用时,传入的('Hello' 和 'Python')则是实参。
固定数量参数的函数
到目前为止,关于函数,我们介绍的都是固定数量的参数。来看一个简单的示例:
>>> def greet(say, msg):
... print(say, msg)
...
>>>
>>> greet('Hello', 'Python')
Hello Python
这里,函数 greet() 有两个参数,用两个参数调用这个函数,运行得很顺利,不会有任何错误。
倘若,参数的个数不匹配,会发生什么?
>>> greet() # 没有参数
...
TypeError: greet() missing 2 required positional arguments: 'say' and 'msg'
>>>
>>> greet('Hi') # 只有一个参数
...
TypeError: greet() missing 1 required positional argument: 'msg'
显然,解释器会发牢骚。但是,对 Python 来说,要解决这个问题简直是易如反掌,继续往下看!
默认参数
定义函数时,可以使用赋值运算符(=)为参数指定一个默认值。
注意: 如果参数没有默认值,在调用时必需为其指定一个值;如果参数有默认值,那么在调用时值是可选的,如果为其提供了一个值,将会覆盖默认值。
>>> def greet(say, name = 'James', msg = 'I am your biggest fan!'):
... print(say, ',', name, ',', msg)
...
>>> greet('Hi') # 只提供强制性的参数
Hi , James , I am your biggest fan!
>>>
>>> greet('Hi', 'Kobe') # 给出一个可选参数
Hi , Kobe , I am your biggest fan!
>>>
>>> greet('Hi', 'Kobe', 'I want to challenge you!') # 给出所有参数
Hi , Kobe , I want to challenge you!
由于 say 没有默认值,所以必须指定;name、msg 有默认值,所以值是可选的。
函数中的所有参数都可以有默认值,但是,一旦存在一个默认参数,其右侧的所有参数也必须有默认值。也就是说,非默认参数不能在默认参数之后。
例如,将上面的函数定义为:
def greet(name = 'James', say):
就会引发错误:
SyntaxError: non-default argument follows default argument
关键字参数
当使用某些值调用函数时,这些值将根据其位置分配给参数。
例如,在上述函数 greet() 中,当使用 greet('Hi', 'Kobe') 调用它时,'Hi' 被赋值给参数 say,同样地,'Kobe' 被赋值给 name。
Python 允许使用 kwarg = value 格式的关键字参数调用函数:
>>> def greet(say, name = 'James'):
... print(say, ',', name)
...
>>>
>>> greet(say = 'Hi', name = 'Kobe') # 2 个关键字参数
Hi , Kobe
>>>
>>> greet(name = 'Kobe', say = 'Hi') # 2 个关键字参数(次序颠倒)
Hi , Kobe
>>>
>>> greet('Hi', name = 'Kobe') # 位置参数与关键字参数混合使用
Hi , Kobe
当以这种方式调用函数时,关键字参数必须在位置参数之后,所有传递的关键字参数都必须与函数接受的某个参数匹配,并且它们的顺序不重要。
例如,僌4(g4(4(4()С4)}}}|})С4(4(4(zs4(Rr4(SrIMS2jV63ZB>VVbBB#&r>VjV7b>4(nknj>~r/rgc(нMх}*L/(нMх}V*L/(нMх}V6z_Vg,/(нMх}_N7>+(нMх}^g,,4(rorZ&/r'&* |