2013-03-06 13 views
5

così ho questo codice:Passando cambiamenti variabili tra le discussioni in funzioni Python [principianti]

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

Sto cercando di capire perché non posso ottenere bar-= a true .. Se è così, allora l'altro thread dovrebbe vedere la modifica e scrivere Success!

+0

La 'barra' nelle due funzioni non è nello stesso ambito. Dovresti occuparti degli ambiti prima di imparare il multithreading. In ogni caso ci dovrebbero essere costrutti di risorse reciproche che puoi usare per i thread. –

+0

Il rientro in 'time.sleep (1)' è sbagliato. Penso che sia stato pensato per essere all'interno del ciclo while. –

risposta

1

È necessario specificare "bar" come variabile globale. Altrimenti 'barra' è considerata solo come una variabile locale.

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

bar è una variabile globale. Si dovrebbe mettere global bar all'interno example():

def example(): 
    global bar 
    while True: 
     time.sleep(5) 
     bar = True 
  • Quando lettura una variabile, viene prima cercata all'interno della funzione e se non lo trova, al di fuori. Ecco perché non è necessario inserire global bar all'interno di foo().
  • Quando una variabile è assegnata a un valore, viene eseguita localmente all'interno della funzione a meno che non sia stata utilizzata la dichiarazione global. Ecco perché è necessario inserire global bar all'interno di example()