module import:NameError:未定义name

时间:2013-10-31 16:55:18

标签: python python-import

如何在导入器中定义函数,使其在导入内部可见?我试过这个

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,但我不明白如何。

3 个答案:

答案 0 :(得分:9)

importer.py

def build():
   print("building")

build() #this extra call will print "building" once more.

imported.py

from importer import build
build()

请注意,importer.py和imported.py必须位于同一目录中。我希望这能解决你的问题

答案 1 :(得分:5)

导入不包括:它们是幂等的should always be at the top of a module

没有圆形;一旦看到import fooimport foo的其他实例将无法再次加载该模块。

您正在获取NameError,因为在imported.py的上下文中,没有名称build,它被称为importer.build()

我不知道你在尝试使用奇怪的结构代码。

答案 2 :(得分:-13)

我知道这是一个亵渎,但允许导入模块而不用导入器导入的东西很容易在Python中作为脚本语言使用。您始终可以使用execfile

评估文件