Не знаю, в каком из форумов лучше спросить, потому спрошу здесь.
Из офиц. туториала Питона 3.1:
On the other hand, the actual search for names is done dynamically, at run time — however, the language definition is evolving towards static name resolution, at “compile” time, so don’t rely on dynamic name resolution! (In fact, local variables are already determined statically.)
как собственно должна выглядеть программа, которая полагается на динамическое разрешение имен, а не на статическое?
16.09.10 13:51: Перенесено модератором из 'Философия программирования' — WolfHound
Of course, the code must be complete enough to compile and link.
L_L>On the other hand, the actual search for names is done dynamically, at run time — however, the language definition is evolving towards static name resolution, at “compile” time, so don’t rely on dynamic name resolution! (In fact, local variables are already determined statically.)
L_L>как собственно должна выглядеть программа, которая полагается на динамическое разрешение имен, а не на статическое?
в общем-то, интересно, какой код может поломаться в будущем.
Of course, the code must be complete enough to compile and link.
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>как собственно должна выглядеть программа, которая полагается на динамическое разрешение имен, а не на статическое?
подошел бы, если бы собирались поменять правила, как eval должен работать , но ведь это не так?
(просто, мое внимание привлекла фраза о будущих возможных изменениях, к сожалению, без конкретики)
Of course, the code must be complete enough to compile and link.
L_L>>On the other hand, the actual search for names is done dynamically, at run time — however, the language definition is evolving towards static name resolution, at “compile” time, so don’t rely on dynamic name resolution! (In fact, local variables are already determined statically.)
L_L>>как собственно должна выглядеть программа, которая полагается на динамическое разрешение имен, а не на статическое? L_L>в общем-то, интересно, какой код может поломаться в будущем.
Может быть, что-то в районе читать/писать в globals/locals...
L_L>On the other hand, the actual search for names is done dynamically, at run time — however, the language definition is evolving towards static name resolution, at “compile” time, so don’t rely on dynamic name resolution! (In fact, local variables are already determined statically.)
В принципе, типичный лиспер уже вот такую ситуацию не считает статикой:
if condition1:
a = 1
elif condition2:
a = '!!!1111eleven'else
pass
print a
MC>В принципе, типичный лиспер уже вот такую ситуацию не считает статикой: MC>
MC>if condition1:
MC> a = 1
MC>elif condition2:
MC> a = '!!!1111eleven'
MC>else
MC> pass
MC>print a
MC>
Насколько я понимаю, в Питоне подобное останется всегда, даже в свете изменений towards static name resolution — т.е. это легальный код, который может привести к исключению и таковым он и останется.
Кстати, вопрос по "стилю" — нормально ли в питоне писать что-то вроде такого:
... здесь никакого binding'a 'a' не было
if cond:
a = ....
else
a = ....
..... use a
Т.е. не писать какой-то инициализации 'а' до if?
Of course, the code must be complete enough to compile and link.
Здравствуйте, Lorenzo_LAMAS, Вы писали: L_L>Кстати, вопрос по "стилю" — нормально ли в питоне писать что-то вроде такого:
... L_L>Т.е. не писать какой-то инициализации 'а' до if?
Я сам не питонист (поэтому не знаю, что там у них считается кошерным), но в простых случаях (когда переменная инициализируется в обеих ветках, просто по-разному) так и пишу.