Задать вопрос
@Daibend
Начинающий пайтон дэв.

Инициализируется ли строка во время ошибки?

Добрый вечер, подскажите мне ответ на такой вопрос :)

У меня есть такой участок кода:
int_text = int(input("it's just an instance, bro"))


В случае, если я введу ничего, то выскочит Value Error for int() with base 10: " "

Так вот, на момент выхода ошибки, переменная int_text уже присвоила себе пустую строку?
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Как я понимаю, как происходит «инициализация».

Где-то создаётся объект, и переменная int_text создается и «привязывается» к этому объекту, как ярлычок к чайному пакетику.

А объект «пустая строка» тут не создаётся. Ну, точнее, не получается на выходе правой части «уравнения». И ярлычок int_text никуда не привешивается. И, видимо, его тут же сьедает сборщик мусора.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MinTnt
@MinTnt
Если рассматривать всё не как присваивание, а как "связывание" имени переменной с объектом.
И подать саму запись присваивания в немного ином виде.
globals().__setitem__('int_text', int(input("it's just an instance, bro")) )

То можно всё представить как функцию, которой передаются нужные атрибуты.
Т.е. имя переменной, что мы передали, а так же объект который мы хотим присвоить, сначала находятся лишь на локальном уровне этой самой функции, пока она не вмещается в список гдобальных переменных.

Т.е., если всё рисовать в некой последовательности действий.
То сначала производится инициализация объектов, что переданы функции.
1) Передан атрибут в виде объекта строки - принято
2) Передаются атрибут в виде функции - ожидание результата. Как только получит результат от функций, пойдет дальше, или же не пойдёт в случае ошибки. И запустится функция присваивания.
3). В механике функции присваивания, имя переменной связывается с уже поданным на блюдичке объекте.

А вот с функциями содержащими рекурсию всё интереснее. К примеру, если написать x = x, не выйдет вызвать рекурсию, так как для начала нужно получить объект x. А вот если записать функцию, к примеру x = lambda: x(). Система сразу же может получить готовый объект функции. А так как его содержимое "инициализируется" лишь при непосредственном использовании. То когда мы уже используем саму функцию по имени переменной, то когда при выполнении функция встречает x(), она свободно выполняет её, так как имя переменной уже создано на локальном уровне, и связано с объектом.

И только после того, как полностью будет готов нужный объект, оно свяжет переменную с ним.

P.s. С реальностью не сильно сходится (имею ввиду представление всего, как функции), но механика похожая. Просто мне проще всё представлять как функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы