Python » Страница 757
-Программирование на Python
ясно. Блин, лень щас рыть доки второго питона, там я гляжу bind по-другому, но надеюсь, ты знаешь, что делаешь. Ладно. Там у тебя вызывается gui_doma. В ней на объекте img1 чето рисуется. И че толку? В следующий момент вызывается функция gui_redraw, где, как у тебя прописано в условии, блитируется не img1, а img, ибо в функции gui_doma ты не заюзал инструкцию global по отношению к переменной state. Я это писал выше. Вобщем, допиши перед тем, как записать туда новое значение строку global state. Тем самым ты укажешь интерпретатору, что ты юзаешь именно ту state, поместив ее в глобальное пространство имен, всвязи с чем она будет видна в любой функции. В твоем же случае ты просто создал одноименную локальную переменную state в функции gui_doma и присвоил ей ссылку на значение 2, но она не имеет отношения к той state, что читается в qui_redraw.
dimy44
спасибо огромное. проблема была действительна с global
дописал в функцию gui_doma() строчку global state, и все заработало так как надо. получается что и в других функциях эта переменная будет глобальной без объявлении global state
я думал что я понял как работают переменные в скрипте, т.е. если я присваиваю в главном скрипте state то она будет уже глобальной для всего скрипта. наподобии того же как и
canvas=appuifw.Canvas(). ведь canvas доступен у нас в любой функции
тогда у меня такой вопрос, если я напишу в скрипте (не в функции) global state, то скрипт все равно не работает. ведь я же объявил её уже глобальной
Вне функции переменную объявлять global незачем, хотя в некоторых примерах так делают, но это бестолково. Внутри каждой функции, в таких случаях, нужно объявлять только тогда, когда присваиваешь ей значение. Если же переменная внутри функции юзается только для чтения, то объявлять не нужно, и так ясно, она ведь уже была создана, а вот в случае присваивания значения- другое дело, ведь внутри функции без особой инструкции создается локальная переменная, видимая лишь внутри этой функции, пусть даже с таким-же именем, как и глобальная в другом месте, но в разных пространствах имен.
-------------
добавлено в 09.23: вообще эти global многие ненавидят. Вот ты можешь создать пустой класс
class C: pass
pss = C() # инстанс
теперь можешь с ним работать:
pss.state = 1, переменная pss.state не нуждается в инструкции global.
и еще (на правах занудства): мне кажется не совсем удачным выбор значений переменной-флажка state, лучше 0 и 1, и тогда ты сможешь уже с ней работать как с указателем индекса, минуя условия-проверки-сравнения. Скажем, функцию gui_redraw можно в одну строку записать: def gui_redraw(x): canvas.blit((img, img1)[state])
dimy44
ого. круто. я не додумался бы до такого. буду юзать индексы. спасибо большое
-------------
добавлено в 11.10: и ещё такой вопрос
class Home:
def pr(self):
self.i='10'
print '1'
home=Home()
home.pr()
print home.pr.i
получаю ошибку
AttributeError: 'function' object has no attribute 'i'
что я делаю не так.
в классах global как я понимаю вообще не используется?
- «
- 1
- 2
- --
- 756
- 757
- 758
- --
- 974
- 975
- »