我对python
中变量的名称空间和范围感到困惑假设我有一个test.py:
# -*- coding: utf-8 -*-
"""
@author: jason
"""
if __name__ == '__main__':
global strName
print strName
然后,我定义一个名为strName的变量并尝试在test.py中访问它,但它会抛出一个错误:
In [9]: strName = "Joe"
In [10]: run test.py hello
--------------------------------------------------------------------------- NameError Traceback (most recent call last) C:\Anaconda\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
195 else:
196 filename = fname
--> 197 exec compile(scripttext, filename, 'exec') in glob, loc
198 else:
199 def execfile(fname, *where):
d:\playground\test.py in <module>()
13 print "hello"
14 global strName
---> 15 print strName
16
NameError: global name 'strName' is not defined
In [11]:
我想知道为什么会发生这种情况,有没有办法在test.py中访问strName?
答案 0 :(得分:1)
<强> test.py:强>
strName = "John Doe"
print strName
Interactive Shell:
$ python
>>> from test import strName
>>> print strName
John Doe
答案 1 :(得分:1)
global
不是全球性的。 global
是模块级别的;真正的全局变量如min
和int
存在于__builtin__
模块(Python 3中的builtins
)中。在模块级别使用global
声明是多余的。
我强烈建议您以另一种方式将数据传递给test.py
,例如在其中定义一个函数并将字符串作为参数传递:
test.py:
def print_thing(thing):
print thing
其他想要使用test.py的代码:
import test
test.print_thing("Joe")
答案 2 :(得分:0)
Global专门用于在方法外定义变量并希望在该方法中使用它而不传入参数的情况。它放在方法的顶部,以便python将该变量视为全局变量,而不是具有相同名称的新局部变量。 Global不是声明变量的方法,并且由于strName不存在,因此全局无法确定strName的位置。