我正在处理一些自动生成的python代码。我想避免手动编辑这些python文件,因此出现以下问题:
食物比:
def foo():
print "foo"
boo.py:
def boo():
foo.foo() # <-- global name 'foo' not defined
print "boo"
条形图.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中。
谢谢。
不。如果你想
foo
在boo
中可用,你需要在boo
中导入它。位于bar
中的import foo
只使foo
在bar
模块中可用。通常,Python中的
import
语句类似于变量定义。你可以这样想:精神替代与
(
__import__
是Python解释器的一个内置函数,它可以导入一个模块,或者查找对已导入的现有模块的引用,并返回该引用)任何自动生成
boo.py
的操作都是错误的。它应该在文件中的某个地方添加import foo
。您可以通过在bar.py
中执行此操作来绕过它:但你真的不该这么做。(我赞同亚历克斯·马泰利所说的这种事情是一个巨大的黑客行为)
不,它不应该:
import
,像任何其他绑定名称的方法一样,在一个特定的作用域中绑定该名称,而不是“在所有可能需要它的作用域中”。有一个非常糟糕的黑客——我不想忍受它(我宁愿把我的精力投入到让
boo.py
修复的完全崩溃的代码生成器上——如果它有一个巨大的错误,比如缺少一个关键的必需的导入,它还会有什么可怕的后果?!)但是,嘿,这不是我的葬礼…;-)有
bar.py
开始…:这样,您就可以使标识符
foo
成为一个“假的、人工的内置名称”(只有一种名称可以从每个作用域中使用,除非被名称的其他中间绑定所隐藏 在更近的范围内)指的是模块foo
。不是推荐的过程,只是构建
boo.py
的代码生成器中可怕的、突出的错误的临时解决方案。把那个错误修好,这样你就可以尽快退出这个黑客程序了!你必须在boo中导入foo
波比
酒吧.py
相关问题 更多 >
编程相关推荐