5

だから私はこのコードを持っています:

import time
import threading

bar = False

def foo():
    while True:
        if bar == True:
            print "Success!"
        else:
            print "Not yet!"
    time.sleep(1)

def example():
    while True:
        time.sleep(5)
        bar = True

t1 = threading.Thread(target=foo)
t1.start()

t2 = threading.Thread(target=example)
t2.start()

に到達できない理由を理解しようとしbar=trueます..もしそうなら、他のスレッドは変更を見て書き込みますSuccess!

4

2 に答える 2

11

barグローバル変数です。global bar中に入れる必要がありますexample()

def example():
    global bar
    while True:
        time.sleep(5)
        bar = True
  • 変数を読み取るとき、最初に関数内で検索され、見つからない場合は外部で検索されます。global barそのため、中に入れる必要はありませんfoo()
  • 変数に値が割り当てられるglobalと、ステートメントが使用されていない限り、関数内でローカルに行われます。だからglobal bar中に入れる必要があるexample()
于 2013-03-06T17:58:40.400 に答える
1

グローバル変数として 'bar' を指定する必要があります。それ以外の場合、'bar' はローカル変数としてのみ考慮されます。

def example():
    global bar
    while True:
        time.sleep(5)
        bar = True
于 2013-03-06T17:58:35.673 に答える