我对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吗?
global
不是全球性的。global
是模块级别的;真正的全局变量,例如min
,int
并存在于__builtin__
模块中(builtins
在Python 3中)。global
在模块级别使用声明是多余的。
我强烈建议您将数据传递给test.py
另一种方式,例如在其中定义一个函数并将字符串作为参数传递:
test.py:
def print_thing(thing):
print thing
其他要使用test.py的代码:
import test
test.print_thing("Joe")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句