Python“导入”范围
我正在处理自动为我生成的一些python代码。我想避免手动编辑这些python文件,因此避免这个问题/问题:
foo.py:
def foo():
print "foo"
boo.py:
def boo():
foo.foo() # <-- global name 'foo' not defined
print "boo"
bar.py:
import foo
import boo
def bar():
boo.boo()
print "bar"
执行:
python.exe bar.py
给出了boo
找不到的错误foo
。但是bar都导入foo
&boo
。不应foo
自动提供给boo
?
有办法吗?如前所述, boo.py 是为我自动生成的,我想避免将import foo添加到 boo.py中 。
谢谢。
-
但是bar会同时导入foo和boo。foo是否应该自动可用于boo?
不,它不应该:
import
与其他任何绑定名称的方式一样,将名称绑定在单个特定的范围内,而不是“在可能需要的所有范围内”。有办法吗?如前所述,boo.py是为我自动生成的,我想避免在boo.py中添加import foo
有一个非常糟糕的hack-我不想忍受它(我宁愿投入我的精力来使这个完全损坏的代码生成器可以
boo.py
修复-
如果它有一个巨大的错误,例如缺少关键的必要导入,它还可以存储什么其他恐怖内容?!),但是,这不是 我的 葬礼… ;-)有
bar.py
开始…:import foo import boo import __builtin__ __builtin__.foo = foo
你所做的标识这样
foo
一个“假的,人造的内置名”(唯一一种的名称 是
从每一个范围,除非在接近范围的名字的其他介入绑定阴影)指的是模块foo
。不 推荐使用此过程,只是针对构建的代码生成器中的可怕,明显漏洞的临时解决方法
boo.py
。 修复该错误, 以便您可以尽快停用此黑客!