擅长:python、mysql、java
<p>最好的(也是最快的)方法是使用简单的方法重命名变量。但如果你坚持,你可以用这个来避免命名冲突:</p>
<pre><code>import sys
_global = sys.modules[__name__]
# or _globals = sys.modules[__name__].__dict__
myVar = 1
def myFunction(myVar):
_global.myVar = myVar # or _globals['myVar'] = myVar
print myVar # 1
myFunction(42)
print myVar # 42
</code></pre>
<p><strong>说明:</strong></p>
<p>在模块中,模块的名称(字符串形式)可用作全局变量<code>__name__</code>的值。名称<code>sys.modules</code>是指将模块名称映射到已加载模块的字典。如果<code>myFunction()</code>正在运行,则其模块已加载,因此此时<code>sys.modules[__name__]</code>就是它在其中定义的模块。由于全局变量<code>MyVar</code>也在模块中定义,因此可以使用<code>sys.modules[__name__].myVar</code>来访问它。(为了使它的用法类似于java,可以将其命名为<code>this</code>,但我个人认为<code>_global</code>更好。)</p>
<p>此外,由于模块的只读<code>__dict__</code>属性是其名称空间,也就是表示为字典对象的全局名称空间,<code>sys.modules[__name__].__dict__</code>是引用它的另一种有效方法。在</p>
<p>请注意,在这两种情况下,如果对不存在的名称进行赋值,就像使用<code>global</code>关键字一样,那么将创建新的全局变量。在</p>