Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 19, 2011 07:24:14

Voroshek
От:
Зарегистрирован: 2011-03-11
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

глобальная и местная переменная

import pygame, time
from pygame import *
pygame.init()

hod = 'n'
a = 0

def menu():
if a == 0:
menu_fon = image.load('img/menu_fon.png').convert_alpha()
menu_fon.blit(okno)
a = 1
return a

okno = display.set_mode((800, 600))
while hod != 'c':
for event in pygame.event.get():
if event.type == QUIT:
hod = 'c'
if hod == 'n':
menu()
display.flip()
time.wait(41)

if a == 0:
UnboundLocalError: local variable 'a' referenced before assignment
Как так? Ведь интерпретёр должен искать (и найти!:mad:) значение “а” в глобальной области! ЧЯДНТ?



python3 openSUSE-43Leap

Офлайн

#2 Авг. 19, 2011 07:59:30

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

глобальная и местная переменная

def menu():
global a
if a == 0:
Тогда будет искать и найдет.



Офлайн

#3 Авг. 19, 2011 09:33:09

Voroshek
От:
Зарегистрирован: 2011-03-11
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

глобальная и местная переменная

что-то не то… Вот здесь “а” задаётся и вызывается точно также

# -*- coding: utf-8 -*-
import sys
a = 0
b = 1
def c():
if a == 0:
d = b + 1
print(d)

while 1:
c()
sys.exit()
но возвращает, как и ожидалось, 2. В чём разница? Да и вообще global, если не ошибаюсь, помещает местную переменную в глобальную область видимости, нет?



python3 openSUSE-43Leap

Отредактировано (Авг. 19, 2011 10:51:29)

Офлайн

#4 Авг. 19, 2011 11:03:17

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

глобальная и местная переменная

Если в методе есть присвоение переменной “a = 1”, то “a” - считается локальное переменной, а в момент “if a == 0” она ещё не создана.
Во втором случае переменная “а” используется только для чтения, поэтому питон понял, что она глобальная.
Если нужно изменять глобальную переменную то нужно указать, что она глобальная: global a

Офлайн

#5 Авг. 19, 2011 11:57:00

Voroshek
От:
Зарегистрирован: 2011-03-11
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

глобальная и местная переменная

Спасибо, понятно



python3 openSUSE-43Leap

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version