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

Логика вполне нормальная, просто не надо накладывать свои некорректные интерпретации на спецификацию языка.

(Я бы не завелся, если бы единственным твоим тезисом было "у Питона неадекватная документация", что есть правда.)

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

netch: (Default)
netch

December 2023

S M T W T F S
     12
3456789
10111213141516
171819 20212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 22nd, 2026 03:15 pm
Powered by Dreamwidth Studios