擅长:python、mysql、java
<p>不能覆盖参数的值。也就是说,不能将其更改为引用其他对象。但是,您可以更改对象。Python中有一个关于pass-by-value和pass-by-reference语义的旧线程,您可能会发现它很有启发性:<a href="https://stackoverflow.com/a/986145/399047">https://stackoverflow.com/a/986145/399047</a></p>
<p>例如,可以将元素追加到作为参数传入的列表中。以下代码:</p>
<pre><code>def func(a_list):
a_list.append("some value")
l = [1,2,3]
print l
func(l)
print l
</code></pre>
<p>会给出:</p>
<pre><code>[1,2,3]
[1,2,3,"some value"]
</code></pre>
<p>相反,不能修改字符串。以下代码:</p>
<pre><code>def func2(a_str):
a_str += "suffix"
s = "test"
print s
func2(s)
print s
</code></pre>
<p>会给出:</p>
<pre><code>"test"
"test"
</code></pre>
<p>我的建议是,除非您有充分的理由,否则避免更改输入参数,而是返回修改后的对象。副作用会导致代码混乱。</p>
<p>如果在所有这些操作结束时您真的想修改输入参数,那么一种技术就是将代码参数包装到另一个对象中。e、 g</p>
<pre><code>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></pre>
<p>然后你会打电话给:</p>
<pre><code>code_list = [code]
icaocode(code_list)
</code></pre>
<p>也就是说,这个代码对我来说很难看,闻起来很难闻,我不推荐它。</p>