您不能覆盖参数的值。也就是说,您不能将其更改为引用另一个对象。但是,您可以更改对象。在 Python 中有一个关于按值传递和按引用传递语义的旧线程,您可能会发现它很有启发性:https ://stackoverflow.com/a/986145/399047
例如,您可以将元素附加到作为参数传入的列表中。以下代码:
def func(a_list):
a_list.append("some value")
l = [1,2,3]
print l
func(l)
print l
会给:
[1,2,3]
[1,2,3,"some value"]
相反,字符串不能被修改。以下代码:
def func2(a_str):
a_str += "suffix"
s = "test"
print s
func2(s)
print s
会给:
"test"
"test"
除非您有充分的理由,否则我的建议是避免改变您的输入参数,而是返回修改后的对象。副作用会导致代码混乱。
如果在所有这一切结束时您真的想修改输入参数,一种技术是将代码参数包装在另一个对象中。例如
def icaocode(code_list):
input_code = code_list[0]
[...]
# do something to input_code, assign result to
# output_code
[...]
code_list[0] = output_code
然后你会打电话给:
code_list = [code]
icaocode(code_list)
也就是说,这段代码对我来说很难看,闻起来很糟糕,我不推荐它。