2013-03-06 22 views
5

Vì vậy, tôi có mã này:Đi qua những thay đổi biến giữa các chủ đề trong Python chức năng [Beginner]

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() 

Tôi đang cố gắng để hiểu tại sao tôi không thể có được bar-= để true .. Nếu vậy, thì chủ đề khác sẽ thấy thay đổi và viết Success!

+0

Thanh 'trong hai hàm không nằm trong cùng một phạm vi. Bạn nên đối phó với phạm vi trước khi bạn học đa luồng. Trong bất kỳ trường hợp nào cũng có cấu trúc tài nguyên lẫn nhau mà bạn có thể sử dụng cho các chủ đề. –

+0

Thụt lề trong 'time.sleep (1)' là sai. Tôi nghĩ là được dự định ở bên trong vòng lặp while. –

Trả lời

1

Bạn phải chỉ định 'thanh' làm biến toàn cục. Nếu không, 'bar' chỉ được coi là biến cục bộ.

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

bar là biến toàn cục. Bạn nên đặt global bar bên example():

def example(): 
    global bar 
    while True: 
     time.sleep(5) 
     bar = True 
  • Khi đọc một biến, nó là lần đầu tiên đã tìm kiếm bên trong hàm và nếu không tìm thấy, bên ngoài. Đó là lý do tại sao không cần đặt global bar vào bên trong foo().
  • Khi biến được gán giá trị, nó được thực hiện cục bộ bên trong hàm trừ khi câu lệnh global đã được sử dụng. Đó là lý do tại sao cần đặt global bar vào bên trong example()
Các vấn đề liên quan