Python "import"作用域

标签 python import

我正在处理一些自动为我生成的 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 正在导入 fooboofoo 不应该自动提供给 boo 吗?

有办法吗?如前所述,boo.py 是自动为我生成的,我想避免将 import foo 添加到 boo.py

谢谢。

最佳答案

But bar is importing both foo & boo. Shouldn't foo be automatically available to boo?

不,它不应该:import,就像任何其他绑定(bind)名称的方式一样,将该名称绑定(bind)在一个单一的特定范围内,而不是“在您可能想要它的所有范围内” .

Is there a way to do so? As said boo.py is automatically generated for me & I want to avoid adding import foo to boo.py

有一个非常糟糕的 hack -- 我不想忍受它(我宁愿把我的精力投入到让 boo.py 修复的完全损坏的代码生成器上 --如果它有这样一个巨大的错误,比如缺少一个关键的需要的导入,它还会有什么其他的可怕之处?!),但是,嘿,这不是的葬礼...;-)

bar.py 开始...:

import foo
import boo
import __builtin__
__builtin__.foo = foo

通过这种方式,您已经使标识符 foo 成为“假的、人造的内置名称”(唯一一种 在每个范围内都可用的名称,除非被隐藏通过名称的其他介入绑定(bind) 在更近的范围内)指的是模块 foo

不是 推荐的程序,只是针对构建 boo.py 的代码生成器中可怕、明显的错误的临时解决方法。 修复该错误,这样您就可以尽快退出此黑客攻击!

关于Python "import"作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3106089/

相关文章:

javascript - 使用 props drill vs context vs 导入来 react 常量导入

python - from X import Y 在终端中有效,但在从终端执行的脚本中无效

python - 如何获得不和谐的长度。嵌入 [DISCORD.PY]

python - 如何使用 numpy.vectorize 或 numpy.frompyfunc

ios - LARSAdController 中每次出现 "(Class)class"的预期标识符

linux - Swift on Linux - 导入第三方模块

Python 导入语法

python - 有什么方法可以在不使用 shell=True 的情况下使用子进程模块在 Python 中执行管道命令?

java - 如何找到大小为 k 的子数组与数组中每种可能性的总和?

python - 模板不存在 at/polls/index.html