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

importer.py

def build():
   print("building")

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

import.py

from importer import build
build()

importer.py と import.py の両方が同じディレクトリにある必要があることに注意してください。これで問題が解決することを願っています

于 2013-10-31T17:00:57.767 に答える
6

インポートはインクルードされません: それらはべき等であり、常にモジュールの先頭にある必要があります

循環性はありません。import fooが表示されると、それ以上のインスタンスはimport fooモジュールを再度ロードしません。

import.py のコンテキストでは name がなくbuild、 として知られているため、 NameError が発生していimporter.build()ます。

そのような奇妙な構造のコードで何をしようとしているのか、私にはわかりません。

于 2013-10-31T17:14:02.497 に答える