2

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

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

4

3 回答 3

10

进口商.py

def build():
   print("building")

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

导入的.py

from importer import build
build()

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

于 2013-10-31T17:00:57.767 回答
6

Imports are not includes: they are idempotent and should always be at the top of a module.

There is no circularity; once import foo is seen, further instances of import foo will not load the module again.

You are getting the NameError because in the context of imported.py, there is no name build, it is known as importer.build().

I have no idea what you are trying to do with code as oddly structured as that.

于 2013-10-31T17:14:02.497 回答
-14

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

于 2013-10-31T18:03:51.800 回答