如何在导入器中定义函数,使其在导入内部可见?我试过这个
importer.py
是
def build():
print "building"
build()
import imported
因此,imported.py
只是
build()
然而,这失败了
building
Traceback (most recent call last):
File "C:\Users\valentin\Desktop\projects\maxim\miniGP\b01\evaluator\importer.py", line 6, in <module>
import imported
File "C:\Users\valentin\Desktop\projects\maxim\miniGP\b01\evaluator\imported.py", line 1, in <module>
build()
NameError: name 'build' is not defined
更新在我得到循环导入的响应后,导入和导入依赖于彼此,我觉得我需要明确指出这并不总是好的。我的目的是在导入的模块中指定一些常用策略。它将使用一些用户定义的函数,例如build
。用户定义必要的功能并调用策略。关键是共享策略不能依赖于特定的用户定义。我相信代替import
,我需要像evaluate(imported.py)
这样的东西,我相信这是任何脚本语言的基本功能,包括Python。 irc:// freenode / python坚持认为我必须使用import
,但我不明白如何。
答案 0 :(得分:9)
def build():
print("building")
build() #this extra call will print "building" once more.
from importer import build
build()
请注意,importer.py和imported.py必须位于同一目录中。我希望这能解决你的问题
答案 1 :(得分:5)
导入不包括:它们是幂等的should always be at the top of a module。
没有圆形;一旦看到import foo
,import foo
的其他实例将无法再次加载该模块。
您正在获取NameError,因为在imported.py的上下文中,没有名称build
,它被称为importer.build()
。
我不知道你在尝试使用奇怪的结构代码。
答案 2 :(得分:-13)
我知道这是一个亵渎,但允许导入模块而不用导入器导入的东西很容易在Python中作为脚本语言使用。您始终可以使用execfile
评估文件