Существуют инструменты статического анализа для Python, но проверки времени компиляции, как правило, диаметрально противоположны философия привязки времени выполнения, которую охватывает Python. Можно поместить стандартный интерпретатор Python с помощью инструмента статического анализа, чтобы принудительно использовать некоторые ограничения use strict", но мы не видим любое широко распространенное принятие такой вещи.
Есть ли что-то о Python, которое делает "использование строгих" действий ненужным или особенно нежелательным?
В качестве альтернативы, использование "строгого" поведения не нужно в Perl, несмотря на его широкое применение?
Примечание. Под "необходимым" я подразумеваю "практически необходимый", а не строго необходимый. Очевидно, вы можете написать Perl без "строгого использования", но (из того, что я видел) большинство программистов на Perl действительно используют его.
Примечание. Для интерпретатора-интерпретатора Python не требуется "использовать строгие" -подобные ограничения - вы можете использовать псевдо-прагму, подобную "use strict" , которая будет игнорироваться обычным интерпретатором. Я не говорю о добавлении функции уровня языка.
Обновление. Объяснение того, что делает "use strict" в Perl для комментариев. (Ссылка на официальные документы находится в первом абзаце.)
Директива "use strict" имеет три различных компонента, только две из которых действительно интересны:
-
использовать строгие vars: статически проверяет использование переменной в лексической области в вашей программе. (Имейте в виду, что в Python существует только область
global
и областьlocal
). Многие листы Python проверяют это. Поскольку это единственный статический анализ, который они могут сделать, линтеры предполагают, что вы используете прямое лексическое охват и предупреждаете вас о вещах, которые кажутся неправильными в этом смысле, пока вы не скажете им заткнуться; то есть.FOO = 12 foo += 3
Если вы ничего не делаете с вашими пространствами имен, это может быть полезно для проверки опечаток.
-
Использовать строгие ссылки: Предотвращает разглашение символического пространства имен. Самый близкий аналог Python использует
locals()
иglobals()
для выполнения символической привязки и поиска идентификатора. -
использовать строгие субтитры: нет реального аналога в Python.