> если ты сделаешь в main() чтение значения g1, то у тебя почему-то:) прочтётся A.g1. А вот присвоение - пойдёт отдельно.
Еще раз, постепенно.
Мне кажется, ты понимаешь import как способ изменить видимость переменных. Это не так.
"from A import g1" вводит имя g1 в модуле main. С этим именем связывается объект, который был связан с именем g1 в модуле A. Объект, а не имя. Мы не начинаем видеть переменную A.g1 как g1, мы получаем новую переменную g1, которая в начальный момент имеет то же значение.
После этого, когда ты делаешь присваивание g1 в main, ты изменяешь связывание этого имени в main. На каталог A это не оказывает никакого влияния. Что твой пример и иллюстирует.
Для полной ясности, попробуй вот так:
#!/usr/bin/env python
import A
from A import g1
print id(g1), id(A.g1) # both variables are bound with the same object
g1 = {}
print id(g1), id(A.g1) # variable in main is rebound, object identities are different
A.g1 = {}
del(g1)
from A import g1
print id(g1), id(A.g1) # variable in A is rebound, g1 is reimported, now
# they are the same again
Логика вполне нормальная, просто не надо накладывать свои некорректные интерпретации на спецификацию языка.
(Я бы не завелся, если бы единственным твоим тезисом было "у Питона неадекватная документация", что есть правда.)
no subject
Date: 2006-08-27 06:01 pm (UTC)> если ты сделаешь в main() чтение значения g1, то у тебя почему-то:) прочтётся A.g1. А вот присвоение - пойдёт отдельно.
Еще раз, постепенно.
Мне кажется, ты понимаешь import как способ изменить видимость переменных. Это не так.
"from A import g1" вводит имя g1 в модуле main. С этим именем связывается объект, который был связан с именем g1 в модуле A. Объект, а не имя. Мы не начинаем видеть переменную A.g1 как g1, мы получаем новую переменную g1, которая в начальный момент имеет то же значение.
После этого, когда ты делаешь присваивание g1 в main, ты изменяешь связывание этого имени в main. На каталог A это не оказывает никакого влияния. Что твой пример и иллюстирует.
Для полной ясности, попробуй вот так:
#!/usr/bin/env python import A from A import g1 print id(g1), id(A.g1) # both variables are bound with the same object g1 = {} print id(g1), id(A.g1) # variable in main is rebound, object identities are different A.g1 = {} del(g1) from A import g1 print id(g1), id(A.g1) # variable in A is rebound, g1 is reimported, now # they are the same againЛогика вполне нормальная, просто не надо накладывать свои некорректные интерпретации на спецификацию языка.
(Я бы не завелся, если бы единственным твоим тезисом было "у Питона неадекватная документация", что есть правда.)