实参和形参到底有啥不一样?别再傻傻分不清啦!


哈喽,小伙伴们!是不是经常搞不清楚“实参”和“形参”?别怕,今天咱们就来把它彻底说清楚,保证让你不再“傻傻分不清”!

首先,我们得知道它们分别是谁:

形参 (Xíng Cān) - 形式参数: 就像舞台上的“演员”,它只存在于函数定义的时候,是一个占位符,用来接收调用函数时传递过来的数据。它本身并没有具体的值,等待着“实参”来赋予它生命。

实参 (Shí Cān) - 实际参数: 就像观众给演员递过来的“道具”或“剧本”,它是调用函数时实际传递给函数的数据或表达式。实参是有具体值的,它的使命就是给形参“喂食”。

那么,它们到底有啥不一样呢?咱们用几个维度来看:

1. 出现的位置不同:

形参: 只能出现在函数定义的括号内。比如 `def my_func(a, b):` 里面的 `a` 和 `b` 就是形参。

实参: 只能出现在函数调用的括号内。比如 `my_func(10, 20)` 里面的 `10` 和 `20` 就是实参。

2. 存在的时间不同:

形参: 它的生命周期是从函数定义开始,到函数返回结束。它在函数内部“待命”。

实参: 它的存在时间仅仅是在函数调用的那一刻,当函数开始执行时,实参的值被传递给形参,调用结束后,实参就“功成身退”了。

3. 值的来源和确定性不同:

形参: 本身没有值,它只是一个“名字”,它的值是在函数被调用时,由对应的实参来赋值的。它代表的是一种“可能性”。

实参: 必须有值(除非是可变对象,如列表、字典,传递的是引用),它是实实在在的数据,用来初始化形参。

4. 数量可以不同:

形参: 在定义函数时,你需要明确指定需要多少个形参,并用逗号隔开。函数内部只能通过这些形参来接收数据。

实参: 在调用函数时,传递的实参数量必须和形参数量一致(除非是特殊情况,如默认参数、可变参数等,但那又是另一个故事了)。传递的顺序也通常要和形参的顺序对应。

简单总结一下关键区别:

| 特征 | 形参 (Formal Parameter) | 实参 (Actual Parameter) |

| :------- | :------------------------------ | :-------------------------------- |

| 身份 | 函数定义中的占位符/演员 | 函数调用时传递的实际数据/道具 |

| 位置 | 函数定义的括号内 | 函数调用括号内 |

| 值 | 无初始值,等待实参赋值 | 有具体值,用来给形参赋值 |

| 生命 | 定义到返回之间 | 调用的瞬间 |

| 数量 | 定义时指定数量 | 调用时通常与形参数量一致 |

举个例子帮你彻底搞懂:

```python

定义函数,形参是 a 和 b

def add_numbers(a, b):

print(f"函数内部形参 a 的值是: {a}")

print(f"函数内部形参 b 的值是: {b}")

result = a + b

return result

调用函数,实参是 100 和 200

final_result = add_numbers(100, 200)

print(f"计算结果是: {final_result}")

```

运行结果:

```

函数内部形参 a 的值是: 100

函数内部形参 b 的值是: 200

计算结果是: 300

```

在 `def add_numbers(a, b):` 中,`a` 和 `b` 是形参。

在 `add_numbers(100, 200)` 中,`100` 和 `200` 是实参。

当调用 `add_numbers(100, 200)` 时,Python 会把实参 `100` 的值赋给形参 `a`,把实参 `200` 的值赋给形参 `b`,然后在函数内部进行计算。

怎么样?现在是不是感觉清晰多了?记住它们的位置、时间、值和数量就好区分了!别再傻傻分不清啦!