Python:导入的函数访问全局变量

时间:2015-04-22 19:12:52

标签: python scope

我有两个文件,如下所示。

#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

2 个答案:

答案 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也是如此。进一步阅读。

how to access global variable within __main__ scope?