0

で始まるローカル変数main()を設定しようとしています:insideFCT()main()

def insideFCT():
     print "inside"
     info = datetime.datetime.now()
     print info

def main():
     print "starting main"
     insideFCT()
     functionThatPrint(info) #for the example functionThatPrint() acts like print()

main()

それが私に与えるような方法を見つける必要があります:

starting main
inside
2013-09-19...
2013-09-19...
  • まったく変更できませんmain()(「info = insideFCT()」を追加して return を追加できないことを意味しますinsideFCT())
  • 関数が同時に複数回使用されるため (スレッド)、グローバル変数を使用できません。
  • もちろん、これは時間を取得することではなく、datetime.datetime.now()私が制御できない入力を表しています

私の考えは、開始時にそれぞれに固有のものを見つけmain()、「info」をグローバル辞書に保存し、 inglobDict[TheThingSpecific]=infoを使用globDict[TheThingSpecific]してアクセスできるようにすることですfunctionThatPrint()(実際、functionThatPrint()同じ関数で呼び出されるinsideFCT()ため、同じ「特定のもの」があります)

探していた「特定の何か」を見つけました。これはthreading.current_thread()

解決:

  • insideFCT()に情報を保存しますglobalDict[str(threading.current_thread())]
  • functionThatPrint()同じスレッドなので、同じ行を使用してアクセスできます。globalDict[str(threading.current_thread())]
4

1 に答える 1

0

Python の関数スコープ内に外部からローカル変数を設定する方法はありません。名前infoが属するスコープは、「コンパイル時」、つまりインタープリターがdef main()コマンドを実行するときに決定されます。

infoはinsideにバインドされていないため、main()グローバルまたは組み込みであると見なされます。それでおしまい。

于 2013-09-20T10:45:27.400 に答える