> Мне кажется, ты понимаешь import как способ изменить видимость переменных. Это не так.
> "from A import g1" вводит имя g1 в модуле main. С этим именем связывается объект, который был связан с именем g1 в модуле A. Объект, а не имя. Мы не начинаем видеть переменную A.g1 как g1, мы получаем новую переменную g1, которая в начальный момент имеет то же значение.
Никакого "начального момента" нет, это всё время одна и та же переменная, введённая в глобальные данного модуля. Что чётко и сказано в документации.
> После этого, когда ты делаешь присваивание g1 в main, ты изменяешь связывание этого имени в main. На каталог A это не оказывает никакого влияния. Что твой пример и иллюстирует.
А вот когда я делаю присваивание g1, происходит присваивание другой g1 - локальной для данного блока. Цитата из документации была в постинге. Это можно проверить и практически:
x = 0
def f():
x = 1
print x
def g():
print x
if __name__ == '__main__':
f()
g()
Запускаем:
1
0
> Логика вполне нормальная,
Нет. ™
> просто не надо накладывать свои некорректные интерпретации на спецификацию языка.
Некорректных интерпретаций нет. Я начал писать тот постинг когда разобрался что же происходит и где оно в документации.
> (Я бы не завелся, если бы единственным твоим тезисом было "у Питона неадекватная документация", что есть правда.)
В каком смысле неадекватная? По-моему как раз документация адекватна реализации. И вообще она очень неплохая - после того как разберёшься с парой общих принципов построения. А вот реализация в данном месте резко неадекватна здравому смыслу.
no subject
Date: 2006-08-27 06:20 pm (UTC)> "from A import g1" вводит имя g1 в модуле main. С этим именем связывается объект, который был связан с именем g1 в модуле A. Объект, а не имя. Мы не начинаем видеть переменную A.g1 как g1, мы получаем новую переменную g1, которая в начальный момент имеет то же значение.
Никакого "начального момента" нет, это всё время одна и та же переменная, введённая в глобальные данного модуля. Что чётко и сказано в документации.
> После этого, когда ты делаешь присваивание g1 в main, ты изменяешь связывание этого имени в main. На каталог A это не оказывает никакого влияния. Что твой пример и иллюстирует.
А вот когда я делаю присваивание g1, происходит присваивание другой g1 - локальной для данного блока. Цитата из документации была в постинге. Это можно проверить и практически:
Запускаем:
> Логика вполне нормальная,
Нет. ™
> просто не надо накладывать свои некорректные интерпретации на спецификацию языка.
Некорректных интерпретаций нет. Я начал писать тот постинг когда разобрался что же происходит и где оно в документации.
> (Я бы не завелся, если бы единственным твоим тезисом было "у Питона неадекватная документация", что есть правда.)
В каком смысле неадекватная? По-моему как раз документация адекватна реализации. И вообще она очень неплохая - после того как разберёшься с парой общих принципов построения. А вот реализация в данном месте резко неадекватна здравому смыслу.