Skip to content

Python 函数的参数与实参

在 Python 中,函数是一段可重复使用的代码块,用于执行特定的任务。要理解函数的工作方式,理解参数 (Parameters)实参 (Arguments) 的概念至关重要。 本文将通过简单易懂的例子,帮助你理解这两个概念。

让我们先看一个简单的 Python 函数:

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

定义了这个函数后,我们现在可以调用它,也就是使用它:

python
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)

在函数定义中,fst 被称为形参 (parameters)。你可以把它们想象成函数定义的占位符,它们指定了函数需要接收什么类型的数据才能正常运行。 t 还有一个默认值 None,因此它是一个默认参数。 这意味着如果在调用函数时没有提供 t 的值,t 将使用默认值 None

实参 (Arguments)

实参 (arguments) 是你实际传递给函数的值。 它们是在调用函数时,传递给形参的真实数据。 在上面的例子中, fstsndtrd 都是实参。

当函数被调用时,实参的值会被传递给对应的形参。 这些形参在函数内部就像是**局部变量 (local variables)**一样。局部变量只在函数内部有效,函数执行完毕后,这些变量就会被销毁。

  • 对于 sm1sm3fst 的值传递给 fsnd 的值传递给 strd 的值传递给 t
  • 对于 sm2fst 的值传递给 fsnd 的值传递给 s。 由于没有提供第三个实参,t 使用其默认值 None
  • 对于 sm4: 尽管 fs 的位置反过来了,由于使用关键字指定了值,fst 的值传递给 fsnd 的值传递给 s

执行上述代码后,sm1sm2 的值将是:

python
>>> sm1
40
>>> sm2
30

位置参数和关键字参数

在调用函数时,我们可以使用两种方式传递实参:位置参数 (positional arguments)关键字参数 (keyword arguments)

  • 位置参数: 实参的顺序必须与函数定义中形参的顺序一致。 例如,在 sm1 = adder(fst, snd, trd) 中,fst 对应 fsnd 对应 strd 对应 t

  • 关键字参数: 使用形参的名字来指定实参的值。 这样可以忽略参数的顺序。 例如,在 sm4 = adder(s=snd, f=fst) 中,我们显式地指定了 s 的值为 sndf 的值为 fst,所以顺序并不重要。

  • 形参 (Parameters) 是函数定义中声明的变量,用于接收函数调用时传递的值。

  • 实参 (Arguments) 是在函数调用时传递给函数的值。

  • 可以通过位置或关键字的方式传递实参。