у меня в списке про итератор, и что может быть ключом словаря)
попробуйте объяснить почему x = 0 y = 0 def foo(): x = 1 y = 1 class X: print(x, y) x = 2 foo() > 0 1
Вот это да . Боярка меня расхуяриla
Так рил а в чем прикол то. Чат гпт не смог объяснить . Выводится результат выражения print(x, y) и x = 2?
Он написал что выводится.
Я спрашиваю значение или результат выражения чего выводится .
выводится x который глобал и у внутри функции foo
Так ну суть в том что когда в классе объявлено поле то из внешней функции переменная с таким именем больше не доступна в этом классе без nonlocal(возможно прo nonlocal бред). Но так как код ещё не дошел до выполнения где идёт инициализация х то интерпретатор подставляет глобальную переменную .
Получатся питон как-то анализирует код перед запуском, я думал он по строчке выполняет .
В классе происходит печать до инициализации внутренней переменной.
Да только ты забыл добавить при ее наличии .
Получатся неявное объявление без инициализации.
Тут как по мне проблема в другом
Почему ? Это же была мега философия питона не иметь объявлений переменных и не иметь неявного а тут получается два в одном.
В этом коде печатаються именно эти переменные выделенные жирным: x = 0 y = 0 def foo(): x = 1 y = 1 class X: print(x, y) x = 2 foo() > 0 1 Если следовать правилу LEGB - то класс сначала должен посмотреть значение переменных x, y у себя внутри, потом внутри функции foo и только потом взять глобальные. Здесь же x из глобала, и у из функции foo. Почему так я не понимаю.
Я же объяснил выше почему так
жду обьяснения как это работает
Обсуждают сегодня