调用函数时实参与形参

在进行函数调用时,往往需要将一些数据传递给函数进行处理,这些数据就是实参 。而在函数定义中,为了接收这些数据,需要定义形参 。实参和形参之间的关系非常重要,因为它直接影响着函数的执行结果 。本文将从多个角度分析调用函数时实参与形参的关系 。
1. 位置参数

调用函数时实参与形参

文章插图
在函数调用时,实参的传递方式主要有两种:位置参数和关键字参数 。位置参数是指按照函数定义中形参的顺序,将实参依次传递给函数 。例如,下面的代码中,函数add接收两个位置参数x和y,将它们相加后返回结果 。
```
def add(x, y):
return x + y
result = add(2, 3)
print(result) # 输出5
```
在这个例子中,调用函数add时传递的实参2和3对应的是形参x和y 。因为实参的顺序与形参的顺序一一对应,所以这种传递方式称为位置参数 。
2. 关键字参数
【调用函数时实参与形参】另一种常见的实参传递方式是关键字参数 。在这种方式下,实参与形参之间通过形参的名称进行匹配,而不是按照顺序进行匹配 。例如,下面的代码中,函数power接收两个关键字参数base和exponent,将base的exponent次方作为结果返回 。
```
def power(base, exponent):
return base ** exponent
result = power(base=2, exponent=3)
print(result) # 输出8
```
在这个例子中,调用函数power时传递的实参是base=2和exponent=3 。这两个实参通过它们的名称与函数定义中的形参base和exponent进行匹配,因此这种传递方式称为关键字参数 。
3. 默认参数
在函数定义中,可以为形参指定默认值 。这种形参称为默认参数 。如果在函数调用时没有传递对应的实参,函数会使用该形参的默认值 。例如,下面的代码中,函数greet接收一个位置参数name和一个默认参数message,如果没有传递message,函数将使用默认的问候语“Hello” 。
```
def greet(name, message="Hello"):
print(message, name)
greet("Bob") # 输出Hello Bob
greet("Alice", "Hi") # 输出Hi Alice
```
在这个例子中,调用函数greet时只传递了一个实参"Bob",因此函数使用了message的默认值"Hello" 。在第二次调用时,传递了两个实参"Alice"和"Hi",因此函数使用了传递的实参值 。
4. 可变参数
有时候,函数需要接收不定数量的实参,这时可以使用可变参数 。Python中有两种可变参数:*args和**kwargs 。*args用于接收任意数量的位置参数,**kwargs用于接收任意数量的关键字参数 。例如,下面的代码中,函数add接收任意数量的位置参数,将它们相加后返回结果 。
```
def add(*args):
return sum(args)
result = add(1, 2, 3, 4, 5)
print(result) # 输出15
```
在这个例子中,调用函数add时传递了5个位置参数,但是函数定义中没有指定形参,因为使用了可变参数*args,所以函数可以接收任意数量的位置参数 。
5. 参数传递的引用
在Python中,函数参数的传递是通过引用传递的 。也就是说,实参和形参之间共享同一个内存地址,因此在函数内部对形参的修改会影响到实参的值 。例如,下面的代码中,函数change_list接收一个列表参数,并将列表的第一个元素改为10 。
```
def change_list(my_list):
my_list[0] = 10
lst = [1, 2, 3]
change_list(lst)
print(lst) # 输出[10, 2, 3]
```
在这个例子中,调用函数change_list时传递的实参lst和函数内部的形参my_list指向同一个列表对象,因此函数内部对my_list的修改会影响到lst的值 。

推荐阅读