详解python 函数传值方法

  • Post category:Python

Python函数传值的方法有两种——传值调用(call by value)和传址调用(call by reference)。在理解这两种调用方式之前,我们需要先了解Python中的可变对象和不可变对象的概念。

Python中的可变对象包括列表、字典等,而不可变对象包括数字、字符串和元组等。在Python中,传不同类型的参数所采用的调用方法也会不同。

  1. 传值调用(call by value)

传值调用是指在函数调用时,将变量的值传递给函数的形参,函数对形参的任何修改都不会影响到原来的变量。

def increment(x):
    x = x + 1
    return x

a = 5
print(increment(a))
print(a)

在这个例子中,变量a的值为5。在调用increment()函数时,变量a的值被赋给了形参x。在函数内部对x进行操作并返回结果,但是不对原来的变量a进行任何修改。在函数调用结束后,a的值仍然是5。

  1. 传址调用(call by reference)

在Python中,实际上没有传址调用的方式。但是,当我们向函数传递可变对象时,Python将使用传址的方式。这意味着函数中对于可变对象的任何修改都将影响到原始对象。

def modify_list(lst):
    lst.append(4)

a = [1, 2, 3]
modify_list(a)
print(a)

在这个例子中,变量a是一个列表。当调用modify_list()函数时,变量a被传递给了函数的形参lst。在函数内部,我们对lst进行修改并添加了一个新元素4。这个修改同样会影响到原来的变量a,因为alst其实是同一个对象。

需要注意的是,这里所说的“修改”是指对对象本身的修改,而不是简单的修改对象的属性。简单的修改对象的属性并不会影响原始对象。

综上所述,Python中函数的传值方法有传值调用和传址调用两种。当传递不可变对象时,使用传值调用;当传递可变对象时,使用传址调用(实际上是缺省参数传递)。过程中,需要特别注意区分不可变对象和可变对象,以便正确地理解函数调用的行为。