Python 函数的参数与实参
在 Python 中,函数是一段可重复使用的代码块,用于执行特定的任务。要理解函数的工作方式,理解参数 (Parameters) 和 实参 (Arguments) 的概念至关重要。 本文将通过简单易懂的例子,帮助你理解这两个概念。
让我们先看一个简单的 Python 函数:
def adder(f, s, t=None):
"""
这个函数计算 f, s 和 t 的总和。
如果 t 没有被提供,函数就返回 f 和 s 的和。
"""
result = f + s
if t is not None:
result += t
return result
定义了这个函数后,我们现在可以调用它,也就是使用它:
fst = 20
snd = 10
trd = 10
sm1 = adder(fst, snd, trd) # 位置参数调用
sm2 = adder(fst, snd) # 省略带默认值的参数 t
sm3 = adder(f=fst, s=snd, t=trd) # 关键字参数调用
sm4 = adder(s=snd, f=fst) # 关键字参数,顺序不重要
形参 (Parameters)
在函数定义中,f
、s
和 t
被称为形参 (parameters)。你可以把它们想象成函数定义的占位符,它们指定了函数需要接收什么类型的数据才能正常运行。 t
还有一个默认值 None
,因此它是一个默认参数。 这意味着如果在调用函数时没有提供 t
的值,t
将使用默认值 None
。
实参 (Arguments)
实参 (arguments) 是你实际传递给函数的值。 它们是在调用函数时,传递给形参的真实数据。 在上面的例子中, fst
、snd
和 trd
都是实参。
当函数被调用时,实参的值会被传递给对应的形参。 这些形参在函数内部就像是**局部变量 (local variables)**一样。局部变量只在函数内部有效,函数执行完毕后,这些变量就会被销毁。
- 对于
sm1
和sm3
:fst
的值传递给f
,snd
的值传递给s
,trd
的值传递给t
。 - 对于
sm2
:fst
的值传递给f
,snd
的值传递给s
。 由于没有提供第三个实参,t
使用其默认值None
。 - 对于
sm4
: 尽管f
和s
的位置反过来了,由于使用关键字指定了值,fst
的值传递给f
,snd
的值传递给s
。
执行上述代码后,sm1
和 sm2
的值将是:
>>> sm1
40
>>> sm2
30
位置参数和关键字参数
在调用函数时,我们可以使用两种方式传递实参:位置参数 (positional arguments) 和 关键字参数 (keyword arguments)。
位置参数: 实参的顺序必须与函数定义中形参的顺序一致。 例如,在
sm1 = adder(fst, snd, trd)
中,fst
对应f
,snd
对应s
,trd
对应t
。关键字参数: 使用形参的名字来指定实参的值。 这样可以忽略参数的顺序。 例如,在
sm4 = adder(s=snd, f=fst)
中,我们显式地指定了s
的值为snd
,f
的值为fst
,所以顺序并不重要。形参 (Parameters) 是函数定义中声明的变量,用于接收函数调用时传递的值。
实参 (Arguments) 是在函数调用时传递给函数的值。
可以通过位置或关键字的方式传递实参。