擅长:python、mysql、java
<p>这是一个涉及全局和局部范围的问题。虽然函数可以将<code>x</code>作为全局作用域值进行访问,但在重新分配变量时,会对全局值进行阴影处理,但不会返回值:</p>
<pre><code># return local
def getinput(x):
x = input('Enter x: ')
return x
# affect global
def getinput(x):
global x
x = input('Enter x: ')
</code></pre>
<p>使用局部变量并返回值通常比修改全局变量更可取,除非您有完全合理的情况。你知道吗</p>
<p><em>关于可变和不可变类型的注释</em></p>
<p>这种情况还有第二种情况,那就是你所影响的对象的类型。^例如,{<cd2>}和<code>string</code>是不可变的。因此,如果不创建新对象,则无法更改它们的值。<code>list</code>或<code>dict</code>是可变类型的示例。您可以添加和删除它们,更改它们的值。你知道吗</p>
<p>考虑一个可变类型<code>list</code></p>
<pre><code>aList = []
def func():
aList.append(1)
print aList # prints []
func()
print aList # prints [1]
</code></pre>
<p>这将直接附加到全局列表,甚至不指定全局关键字,因为列表本身仍然是相同的列表对象。但是,如果要用新列表覆盖该列表,而不使用全局设置,则不会在全局范围内生效:</p>
<pre><code>aList = []
def func():
aList = [1]
</code></pre>
<p>简而言之,如果您只是要修改对象的内容,而不是指定新对象,那么可变类型不需要global关键字。你知道吗</p>