我有两个文件,如下所示。
#foobar.py
foo = False
def bar():
if foo:
print "Worked"
else:
print "Did not work"
和
#main.py
from foobar import *
foo = True
bar()
print foo
我运行$ python main.py
时的输出是
Did not work
True
bar()
是否可以访问foo
中定义的全球main.py
?
更新
早些时候应该澄清,但我认为问题应尽可能保持透明。
foobar.py
实际上是一个支持文件(其他函数具有不同的参数,也使用全局foo
),我想与一堆相关的iPython笔记本一起使用。
理想情况下,笔记本应该有foo
的定义,并且应该抓住并处理它们。
我选择不将它作为一个参数,只是为了让代码看起来更干净。
我知道:
应该避免使用通配符导入(来自import *),因为它们不清楚命名空间中存在哪些名称,使读者和许多自动化工具都感到困惑.- pep8
答案 0 :(得分:0)
接受L3viathan的评论作为答案。
不,不是。你为什么不想使用参数? - L3viathan 4月22日19:15
Python: Imported functions access to global variables
答案 1 :(得分:-1)
将main.py更改为
#main.py
import foobar
foobar.foo = True
foobar.bar()
print foobar.foo
或强>
将foobar.py更改为
#foobar.py
import __main__
foo = False
def bar():
if __main__.foo:
print "Worked"
else:
print "Did not work"
嗯,main.py中的变量foo只有该模块的范围,foobar.py也是如此。进一步阅读。