优草派  >   Python

调用函数时实参与形参

徐晨光            来源:优草派

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

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的值。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行