我正在处理为我自动生成的一些python代码.我想避免手动编辑这些python文件,因此这个问题/问题:
foo.py:
def foo():
print "foo"
Run Code Online (Sandbox Code Playgroud)
boo.py:
def boo():
foo.foo() # <-- global name 'foo' not defined
print "boo"
Run Code Online (Sandbox Code Playgroud)
bar.py:
import foo
import boo
def bar():
boo.boo()
print "bar"
Run Code Online (Sandbox Code Playgroud)
执行:
python.exe bar.py
给出了一个boo没有找到的错误foo.但是bar正在导入这两个foo&boo.不foo应该自动提供给boo?
有办法吗?如上所述boo.py是为我自动生成的,我想避免将import foo添加到boo.py中.
谢谢.
Ale*_*lli 15
但是bar正在导入foo和boo.不应该自动嘘声?
不,它不应该:import像任何其他方式绑定名称一样,将该名称绑定在单个特定范围内,而不是"在所有范围内,您可能想要它".
有办法吗?如上所述boo.py是为我自动生成的,我想避免将import foo添加到boo.py中
有一个非常糟糕的黑客 - 我不想忍受它(我更倾向于把我的精力投入到完全破坏的代码生成器中boo.py修复 - 如果它有如此巨大的错误,因为缺少一个关键的需要导入,还有什么其他的恐怖可以存放?!),但是,嘿,这不是我的葬礼... ;-)
已经bar.py开始... ...:
import foo
import boo
import __builtin__
__builtin__.foo = foo
Run Code Online (Sandbox Code Playgroud)
这样,你所做的标识foo是"假的,人造的内置名"(唯一的一种名称即是从每一个范围,除非在接近范围的名字的其他介入绑定阴影)指的是模块foo.
不推荐的程序,只是构建代码生成器中可怕的,明显的错误的临时解决方法boo.py. 修复该错误,以便尽快退出此黑客!
不可以。如果您想foo在 中可用boo,则需要将其导入boo. 该import foo说是bar只能使foo中可用的bar模块。
通常,importPython 中的语句有点像变量定义。你实际上可以这样想:精神上替换
import boo
Run Code Online (Sandbox Code Playgroud)
和
boo = __import__('boo')
Run Code Online (Sandbox Code Playgroud)
(__import__是 Python 解释器的一个内置函数,它要么导入一个模块,要么在已经导入的情况下查找对现有模块的引用,并返回该引用)
任何自动生成的boo.py都是错误的。它应该import foo在该文件中的某处添加。您可以通过在以下位置执行此操作来解决它bar.py:
import foo
import boo
boo.foo = foo
Run Code Online (Sandbox Code Playgroud)
但你真的不应该这样做。(我赞同 Alex Martelli 所说的这种事情是一个巨大的黑客)
| 归档时间: |
|
| 查看次数: |
14208 次 |
| 最近记录: |