Python:导入函数访问全局变量
Python: Imported functions access to global variables
我有两个文件如下所示。
#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()
是否可以访问 main.py
中定义的全局 foo
?
更新
应该早点澄清,但我认为这个问题应该尽可能简单。
foobar.py
实际上是一个支持文件(其他函数具有不同的参数,也使用全局 foo
),我想与一堆相关的 iPython 笔记本一起使用。
理想情况下,笔记本应该有自己的 foo
定义,应该发现并处理它的缺失。
我选择不将它作为参数包括在内只是为了尝试让代码看起来更清晰。
我知道:
Wildcard imports ( from import * ) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.-pep8
将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 也是如此。进一步阅读。
how to access global variable within __main__ scope?
接受L3viathan的评论作为答案。
No, it's not. Why don't you want to use arguments? – L3viathan Apr 22 at 19:15
我有两个文件如下所示。
#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()
是否可以访问 main.py
中定义的全局 foo
?
更新
应该早点澄清,但我认为这个问题应该尽可能简单。
foobar.py
实际上是一个支持文件(其他函数具有不同的参数,也使用全局 foo
),我想与一堆相关的 iPython 笔记本一起使用。
理想情况下,笔记本应该有自己的 foo
定义,应该发现并处理它的缺失。
我选择不将它作为参数包括在内只是为了尝试让代码看起来更清晰。
我知道:
Wildcard imports ( from import * ) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.-pep8
将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 也是如此。进一步阅读。
how to access global variable within __main__ scope?
接受L3viathan的评论作为答案。
No, it's not. Why don't you want to use arguments? – L3viathan Apr 22 at 19:15