Форум сайта python.su
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) my_str_1 = "1: inside the class" func() >>> outside of func >>> inside the func
Отредактировано PanovSergey (Май 31, 2014 05:14:28)
Офлайн
a = 1 def func1(): print a def func2(): print a a = 2 func1() func2()
4 def func2(): ----> 5 print a 6 a = 2 7 UnboundLocalError: local variable 'a' referenced before assignment
Отредактировано Singularity (Май 31, 2014 13:20:02)
Офлайн
вот тут ZZZ написал что тут все ясно, но так и не объяснил
Офлайн
Singularity
С твоим кодом проще. Сначала происходит парсинг кода, потом исполнение. При парсинге в функции нашлось “a = 2”, значит в функции будет локальная переменная, при исполнении её кода. Когда код начал исполняться, то интерпретатор знал, что в функции будет локальная переменная, но на этой строчке “print a” она ещё не была определена.
Думаю, что здесь такая логика.
Отредактировано Budulianin (Май 31, 2014 20:17:11)
Офлайн
Budulianin
я все равно нифига не понял.
Похоже этот кусок кода что парсит функцию (про который ты написал) работает и с классами, но берет переменные не в области на уровень выше, а просто в глобальном.
Думаю в питоне нельзя писать декларацию в классах или функциях.
Офлайн
Singularity
Я написал про твой код, к нему такая логика подходит. Про пример с классом, пока не знаю.
Офлайн
Budulianin
когда узнаешь?
Офлайн
Singularity
когда узнаешь?
Отредактировано Budulianin (Май 31, 2014 21:15:25)
Офлайн
Budulianinчерез что?
dis.dis
Офлайн
Singularity
через что?
>>> import dis >>> dis.dis(func2) 2 0 LOAD_FAST 0 (a) 3 PRINT_ITEM 4 PRINT_NEWLINE 3 5 LOAD_CONST 1 (2) 8 STORE_FAST 0 (a) 11 LOAD_CONST 0 (None) 14 RETURN_VALUE
Офлайн