Ваш пример демонстрирует динамический набрав, а не слабый ввод. Динамическое типирование обычно означает, что тип данных, которые может хранить объект, является изменяемым; любая цель может содержать привязку к любому типу объекта. Сравните это, скажем, с C#, который статически типизирован [*].
int i = 5; // Okay.
i = "5"; // Illegal! i can only hold integers.
Строгая типизация означает, что когда-то присваивается значение определенного типа, объекты подчиняются строгие правила о том, как они могут взаимодействовать с другими объектами различных типов. Слабая типизация означает, что такие правила более расслаблены. Это не означает, что строго типизированные языки обязательно превосходят друг друга; это просто выбор языка.
Python считается строго типизированным, поскольку объекты имеют четкое представление о том, что они набирают. Несовместимые операции между объектами вызывают ошибки:
>>> 1 + 1 # Add two integers.
2
>>> "1" + "1" # Concatenate two strings.
'11'
>>> 1 + int("1") # Add two integers.
2
>>> "1" + str(1) # Concatenate two strings.
'11'
>>> 1 + "1" # Undefined! Adding integers and strings is meaningless.
Traceback (most recent call last):
File "", line 5, in ?
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Но в PHP, правила гораздо более расслабленным о том, что является приемлемым. Таким образом, это считается более слабо типизированным, чем некоторые другие языки.
$x = 1 + "1"; // x is 2
[*] Технически, по состоянию на C# 4, C# является статически типизированным, но с неавтоматического динамической типизации в расчете на необязательной основе, благодаря dynamic
ключевому слову. Многие языки в эти дни добавляют динамические возможности и размывают линии, поэтому становится все труднее сказать, что «язык X является динамическим» и «язык Y статичен». Это гораздо больше скользящей шкалы или спектра, чем бинарное свойство.
Python - динамический язык, поэтому он слабо типизирован в некотором смысле и строго типизирован в другом (нет единого определения), но весь вопрос намного сложнее. См. Http://wiki.python.org/moin/StrongVsWeakTyping –
Возможный дубликат [Может ли кто-нибудь сказать мне, что такое сильная типизация и слабые методы набора текста, а какой лучше?] (Http://stackoverflow.com/questions/323323/ can-someone-tell-me-what-strong-typing-and-weak-typing-means-and-which-one-is-be), а также [правильно-понятное-системное-правильное] (http://stackoverflow.com/questions/2135066/is-my-understanding-of-type-systems-correct) – nawfal
Я думаю, что это не обман, поскольку это очень специфично для Python. Это не значит, что мы больше не можем задавать конкретные вопросы по типу системы, потому что сильные и слабые формулировки объясняются в ответах на другие вопросы. Во-первых, даже если бы это объяснялось там, было бы трудно найти между всей другой информацией. –