Уведомления

Группа в Telegram: @pythonsu

#1 Май 31, 2014 21:22:28

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

хм, кто нить объясните внятно

Budulianin
спасибо не знал

Офлайн

#2 Июнь 1, 2014 13:52:26

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

хм, кто нить объясните внятно

Singularity

a = 1
def func1():
    print  a
def func2():
    print  a
    a = 2
func1()
func2()

книжку когда читал (стр.136), там говорилось, что переменная в функциях не может быть одновременнно локальной и глобальной, вот пример более явный

a = 1
   
def func():
    a = a + 2
    print  a



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Июнь 1, 2014 13:57:20)

Офлайн

#3 Июнь 2, 2014 11:25:27

suguby
Зарегистрирован: 2014-06-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

хм, кто нить объясните внятно

Попробую на пальцах.

my_str_1 = "1: outside of func"
my_str_2 = "2: outside of func"
определили две переменных в глобальном неймспейсе

def func():
    my_str_1 = "1: inside the func"
    my_str_2 = "2: inside the func"
определили две переменных в локальном для функции неймспейсе, имена перекрывают глобальный

    class C:
        print(my_str_1)
        print(my_str_2)
класс будет создаваться в момент вызова функции и распечатает две переменных. поиск имен: локальный неймспейс, потом глобальный, встроенные имена (подробнее лучче почитать в книжках, http://www.rsdn.ru/article/python/python_name_resolving.xml например)

        my_str_1 = "1: inside the class"
в момент выполнения в неймспейсе класса будет создана такая переменная.
причем интрепретатор запомнил, что переменная будет использоваться как локальная.

func()
нам нужно распечатать my_str_1 - на локальном неймспейсе её нет (определяется позднее), ищем в глобалном, находим печатаем.

Тонкость в том, что порядок поиска имен не равнозначен порядку вложенности кода. Что и приводит к недоумению.

Отредактировано suguby (Июнь 2, 2014 11:28:49)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version