参数传递方式:值传递、引用传递与Python中的函数参数
参数传递是指在调用函数时将实际参数传递给函数的形式参数的过程。不同的编程语言有不同的参数传递方式,常见的有值传递和引用传递。
值传递是指在将实际参数传递给形式参数时,将实际参数的值复制一份传递给形式参数。这样,在函数内部修改形式参数的值不会影响实际参数的值。在值传递中,函数的形式参数可以看作是实际参数的一个副本。
在Python中,函数的参数传递方式也是值传递。当将一个变量作为参数传递给函数时,实际上是将变量的值传递给函数的形式参数。例如:
def change_value(x):
x = 2
a = 1
change_value(a)
print(a) # 输出1
在上述代码中,将变量a作为参数传递给函数change_value时,实际上是将变量a的值1传递给函数的形式参数x。在函数内部,将形式参数x的值修改为2,但是并不会影响到实际参数a的值。
引用传递是指在将实际参数传递给形式参数时,将实际参数的引用传递给形式参数。这样,在函数内部修改形式参数的值会同时修改实际参数的值。在引用传递中,函数的形式参数可以看作是实际参数的一个引用。
尽管在Python中函数的参数传递方式是值传递,但是当传递的参数是可变对象(如列表、字典等)时,函数内部修改形式参数的值会影响到实际参数的值。这是因为可变对象是通过引用传递的,所以修改形式参数的值也会修改实际参数的值。例如:
def change_list(lst):
lst.append(3)
b = [1, 2]
change_list(b)
print(b) # 输出[1, 2, 3]
在上述代码中,将列表b作为参数传递给函数change_list时,实际上是将列表b的引用传递给函数的形式参数lst。在函数内部,通过形式参数lst修改了列表的值,所以实际参数b的值也会被修改。
需要注意的是,在Python中,对于不可变对象(如数字、字符串等),由于不能直接修改其值,所以函数内部对形式参数的修改不会影响实际参数的值。但是可以通过返回值的方式将修改后的值传递给实际参数。例如:
def change_str(s):
s = s + " world"
return s
c = "hello"
c = change_str(c)
print(c) # 输出hello world
在上述代码中,将字符串c作为参数传递给函数change_str时,实际上是将字符串c的值传递给函数的形式参数s。在函数内部,通过形式参数s修改了字符串的值,并返回修改后的值。通过将返回值赋给实际参数,实现了对实际参数值的修改。
