0

このようなことは可能ですか?

def loadModules():
  import time
  from myModule import *

def runFunction():
  try:
    print str(time.time())
    print myFunction() # myFunction is in myModule (myModule.myFunction)
  except NameError:
    raise RuntimeError("Module was not initialized. Call loadModules() first.")

if (__name__ == "__main__"):
  # this should fail
  try:
    runFunction()
  except RuntimeError:
    print "Exception raised as expected."

  loadModules()

  runFunction() # it should work now

モジュールを loadModules 関数内にインポートすると、モジュールがファイル レベルで宣言されないため、これは期待どおりには機能しません。

モジュールの場合、インポート後にステートメントをtime追加できます。global timeただし、次のように、インポートされたアイテムが不明な状況でこれを達成するにはどうすればよいfrom myModule import *ですか? のすべての関数の名前が自動的にわかるわけではありませんmyModule。仮にそうしたとしても、それは醜い世界的な声明になるでしょう。

基本的に、基本的にすべてのローカル変数を取得してグローバルにすることはできますか?

編集:これはテストコードで機能するように見えました:

def test():
    import time
    global time
    print "Inside test function: %s" % str(time.time())

test()
print "outside function: %s" % str(time.time())

これも機能しました:

def test():
    from time import time
    global time
    print "Inside test function: %s" % str(time())

test()
print "outside function: %s" % str(time())

ただし、これは機能しませんでした:

def test():
    import time
    print "Inside test function: %s" % str(time.time())

test()
print "outside function: %s" % str(time.time())
4

1 に答える 1

3

これは恐ろしい考えです。

インポートglobalの後にステートメントを配置しても、まったく効果がありません。行う唯一のことは、その名前を現在のスコープ内でグローバルとしてマークすることです。関数が戻ると、呼び出し元はまだインポートされた名前を認識していません。

いずれにせよ、とにかく使用するべきではありませfrom MyModule import *ん。

于 2013-06-11T08:07:35.147 に答える