向函数传递可变类型对象
当可变对象(list
, dict
)作为参数传递给函数时,对函数体中相应形参所做的任何修改都会导致原始对象的修改。
因此,在传递可变对象时应格外小心。
传递列表
代码
python
def repeat(lst): # 使用 lst 而不是 l,避免与全局变量混淆
"""将列表中的每个元素乘以 2 (原地修改)"""
for i in range(len(lst)):
lst[i] = lst[i]*2
print("函数内部修改后:", lst)
my_list = [1, 2, 3]
print("调用前:", my_list)
repeat(my_list)
#my_list 被修改了
print("调用后:", my_list)
输出
调用前: [1, 2, 3]
函数内部修改后: [2, 4, 6]
调用后: [2, 4, 6]
传递字典
代码
python
def repeat(dct): # 使用 dct
"""将字典中每个值乘以 2 (原地修改)"""
for key in dct: # 遍历键
dct[key] = dct[key]*2
print("函数内部修改后:", dct)
my_dict = {'a':1, 'b':2, 'c':3}
print("调用前:", my_dict)
repeat(my_dict)
#my_dict 被修改了
print("调用后:", my_dict)
输出
调用前: {'a': 1, 'b': 2, 'c': 3}
函数内部修改后: {'a': 2, 'b': 4, 'c': 6}
调用后: {'a': 2, 'b': 4, 'c': 6}