Мне действительно нравится понимание, которое дает Ван Гейл, но оно не дает ответа на вопрос: «Как вы узнаете, если это утверждение: создает новую переменную или устанавливает существующую переменную?»
Если вы хотите знать, как распознать его при просмотре кода, вы просто ищете предыдущее назначение. Избегайте глобальных переменных, что в любом случае является хорошей практикой, и все будет готово.
Программно, вы можете попробовать обратиться к переменной и посмотреть, есть ли исключение «Ошибка имени»
try:
x
except NameError:
# x doesn't exist, do something
else:
# x exists, do something else
Мне никогда не нужно было этого делать ... и я сомневаюсь, что вам это тоже понадобится.
оповещение о мыльнице !!!
Несмотря на то, что Python выглядит довольно глупо для того, кто привык вводить имя класса (или печатать) снова и снова и снова ... на самом деле он настолько строг, насколько вы этого хотите.
Если вам нужны строгие типы, вы бы сделали это явно:
assert(isinstance(variable, type))
Существуют декораторы, которые делают это очень удобным способом для вызовов функций ...
Вскоре вы можете просто прийти к выводу, что статическая проверка типов (во время компиляции) на самом деле не делает ваш код намного лучше. Есть только небольшая выгода от стоимости наличия избыточной информации о типах повсюду.
В настоящее время я работаю в ActionScript и печатаю такие вещи, как:
var win:ThingPicker = PopUpManager.createPopUp(fEmotionsButton,
ThingPicker, false) as ThingPicker;
который в python будет выглядеть так:
win = createPopup(parent, ThingPicker)
И, глядя на код ActionScript, я вижу, что статическая проверка типов просто не дает никаких преимуществ. Время жизни переменной настолько мало, что мне пришлось бы быть совершенно пьяным, чтобы сделать с ней что-то не так ... и компилятор спас бы меня, указав на ошибку типа.