-4

Pythonキューページの下部からキューの例に従いました。ワーカー関数内のいくつかのグローバル変数にアクセスしたいのですが、アクセスできるグローバル変数とアクセスできないグローバル変数があります。以下の簡単な例では、「rows」変数と「errors」変数にアクセスできますが、カウントに対してUnboundLocalErrorが発生します。「グローバルカウント」を入れると動作します。しかし、なぜ他のグローバルにアクセスできるのかわかりません。

File "myfile.py", line 184, in dpn_worker
    count += 1
UnboundLocalError: local variable 'count' referenced before assignment

これが私が使用したコード例です:

dpns = [1,2,3,4]
q = Queue.Queue()
rows = []
errors = []
count = 0

def dpn_worker():
    while True:
        item = q.get()
        rows.append(1)
        errors.append(1)
        count += 1
        q.task_done()

def main():
    for d in dpns:
        q.put(d)

    for i in range(NUM_WORKERS):
        t = threading.Thread(target=dpn_worker)
        t.daemon = True
        t.start()

    q.join()
4

1 に答える 1

2

この場合、countは整数であるため、次のようになります。

count += 1

と同等です

count = count + 1

したがって、グローバル変数を変更しようとしていますが、実際にはローカル変数を作成しています。しかし、RHSでは、初期化の前にローカル変数を使用しています。

dpn_workerを次のように変更します。-

def dpn_worker():
    global count
    while True:
        item = q.get()
        rows.append(1)
        errors.append(1)
        count += 1
        q.task_done()
于 2012-10-04T17:11:28.010 に答える