Python函数中的参数传递与默认参数设置
发布时间:2023-07-04 20:44:03
在Python中,函数的参数传递方式可以分为两种:按值传递和引用传递。
按值传递是指将参数的值复制一份给函数内部的变量,在函数内部对参数进行修改不会影响到外部的变量。这种传递方式常用于不可变对象(如数字、字符串、元组等)的传递。例如:
def func(a, b):
a = 10
b = [1, 2, 3]
x = 5
y = [4, 5, 6]
func(x, y)
print(x) # 输出 5
print(y) # 输出 [4, 5, 6]
引用传递是指将参数的引用传递给函数内部的变量,修改函数内部的变量会同时影响到外部的变量。这种传递方式常用于可变对象(如列表、字典等)的传递。例如:
def func(lst):
lst.append(4)
list1 = [1, 2, 3]
func(list1)
print(list1) # 输出 [1, 2, 3, 4]
除了按值传递和引用传递外,Python函数还支持设置默认参数。默认参数是在函数定义时给参数一个默认的初始值,调用函数时如果没有传递该参数,则使用默认值。默认参数可以减少调用函数时的参数个数,使得函数调用更加简便。例如:
def greet(name='Alice'):
print('Hello, ' + name + '!')
greet('Bob') # 输出 Hello, Bob!
greet() # 输出 Hello, Alice!
默认参数的值应该是不可变对象,因为如果默认参数是可变对象,那么在函数调用时会共用同一个对象,导致不希望的结果。例如:
def append_value(item, lst=[]):
lst.append(item)
return lst
print(append_value(1)) # 输出 [1]
print(append_value(2)) # 输出 [1, 2]
print(append_value(3)) # 输出 [1, 2, 3]
上面的例子中,由于默认参数lst是可变对象(列表),它会在函数定义时创建并保存起来,所以每次调用append_value函数时都会使用同一个列表对象。这导致了前两次调用append_value函数时的结果不是我们期望的。如果我们希望每次调用append_value函数时都创建一个新的列表对象,可以使用None作为默认参数的值,并在函数内部判断并创建新的列表。例如:
def append_value(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst
print(append_value(1)) # 输出 [1]
print(append_value(2)) # 输出 [2]
print(append_value(3)) # 输出 [3]
这样每次调用append_value函数时都会创建一个新的空列表,解决了上面的问题。
总结起来,Python函数中的参数传递方式有按值传递和引用传递两种。默认参数可以为函数的参数设置默认值,减少函数调用时的参数个数。但是需要注意默认参数的值应该是不可变对象,以避免出现不希望的结果。
