擅长:python、mysql、java
<p>科尔伍德给出了一个很好的答案(和往常一样),但我只想再补充几点。你知道吗</p>
<p>从传递值和传递引用等其他语言的概念来思考Python是如何工作的并没有多大帮助。与其考虑变量、变量的内容和指向变量的指针,不如试着采用Pythonic的观点,考虑对象与名称的绑定,以及对象(及其内容)是否可变。你知道吗</p>
<p>这些概念不仅对于理解在Python中调用函数时会发生什么非常重要,而且通常适用于简单的赋值。换言之,虽然赋值语句可能看起来像其他语言中的赋值语句,但实际发生的情况并不完全相同。你知道吗</p>
<p>Stack Overflow regular.Batchelder有一篇很棒的文章,里面有关于这个主题的可爱的图表:<a href="http://nedbatchelder.com/text/names.html" rel="nofollow">Facts and myths about Python names and values</a></p>
<p>下面是代码的一个变体,它改变了传递给它的列表。通常的Python约定是,改变对象的函数不返回它(尽管有时可以方便地改变该约定)。你知道吗</p>
<pre><code>#! /usr/bin/env python
def hidePasswords(L, password):
for i, elem in enumerate(L):
if elem == password:
L[i] = "*" * len(password)
return
words = ["test", "test1", "test8"]
hidePasswords(words, "test")
print(words)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>['****', 'test1', 'test8']
</code></pre>