擅长:python、mysql、java
<p><code>global</code>不创建新变量,它只是声明该名称应引用全局变量而不是局部变量。通常分配给函数/类/…中的变量。。。参考局部变量。例如,使用如下函数:</p>
<pre><code>def increment(n)
# this creates a new local m
m = n+1
return m
</code></pre>
<p>这里创建了一个新的局部变量<code>m</code>,即使已经存在一个全局变量<code>m</code>。这是您通常想要的,因为某些函数调用不应该意外地修改周围范围中的变量。如果确实要修改全局变量而不创建新的局部变量,可以使用<code>global</code>关键字:</p>
^{pr2}$
<p>如果构造函数中的<code>global</code>没有创建任何变量,则进一步访问<code>globvar</code>的尝试将失败:</p>
<pre><code>>>> import animals
>>> d = animals.dog()
>>> d.bark()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "animals.py", line 7, in bark
print globvar
NameError: global name 'globvar' is not defined
</code></pre>
<p>但是,如果在构造函数中实际为<code>globvar</code>赋值,那么在创建dog时会创建一个模块全局变量:</p>
<pre><code>class dog:
def __init__(self):
global globvar
globvar = 1
...
</code></pre>
<p>执行:</p>
<pre><code>>>> import animals
>>> d = animals.dog()
>>> d.bark()
1
>>> print animals.globvar
1
</code></pre>