Форум сайта python.su
Есть две функции и одна глобальная переменная(флаг), хотя глобальная переменная почему то не отлавливается функциями пишет что ошибка синтаксиса.
[code python]import thread
from time import sleep
l=thread.allocate_lock()
def fun():
while True:
print('function1')
sleep(1)
global p+=1
def by():
while True:
sleep(1)
if ( global p>10):
pass
print('function2')
while True:
global p=0
l=thread.allocate_lock()
potok1=thread.start_new_thread(fun,())
sleep(0.5)
potok2=thread.start_new_thread(by,())
sleep(3)
l.acquire()
sleep(3.5)
l.release()[/code]
Офлайн
gnom
вы не правильно понимаете как работает global, на примере вашего кода нужно везде переделать подобным образом:
global p+=1 # неправильно ! global p # это p+=1 # правильно
Офлайн
Извините что пишу в данной теме.
Всегда считал, что объявление p вне функций (в глобальной области видимости), заменяет использование global каждый раз. Так ли это?
Офлайн
Galvanize
нет, инструкция global задает глобальную переменную в текущей области видимости. ВОт этот код имеет глобальную для модуля исполнения переменную a, в функции foo для ее области видимости мы объявляет глобальную переменную a. Но во вложенной функции spam этого не делаем. В результате при выполнении в ней a+=1 произойдет ошибка, так как в локальной области видимости упоминание об a нет.
a=1 def foo(): global a print a a=2 def spam(): a+=1 print a spam() foo()
Офлайн