По сравнению с такими языками, как Perl, Python имеет ограниченное количество управляющих конструкций:
- только
ifи нет unless,
- только
forто, что перебирает последовательности и нет foreachили C-стиль for,
- только
whileто, что проверяет условие каждый цикл и нет do-while,
- только
if-elifи нет switch,
- есть только одна конструкция комментария,
#и для каждой строки вы можете сказать, закомментирована она или нет, не глядя на предыдущие строки.
Кроме того, есть почти один способ сделать отступ в вашем источнике; большинство случаев творческого отступления синтаксически исключены.
Это облегчает анализ исходного кода Python для людей.
Есть попытки быть минимальными, но полными во встроенных типах и стандартной библиотеке.
- для изменяемого списка вы используете только встроенный
listтип; это O (1) для большинства операций, и вам никогда не придется выбирать правильную реализацию,
- для неизменяемых списков, в равной степени, вы просто используете
tupleтип,
- для карт вы используете единственную встроенную систему,
dictкоторая в большинстве случаев чертовски эффективна, не нужно задумываться о том, какую реализацию использовать.
Python 3 расширяет это до целых чисел: независимо от того, насколько велико ваше целое число, вы используете один и тот же тип и никогда не заботитесь о принуждении.
Python пытается избежать синтаксического сахара. Но иногда это добавляет синтаксический сахар, чтобы сделать очевидный путь очевидным. Вы можете написать if foo is not Noneвместо, if not (foo is None)потому что «не» в специальном случае. Все еще foo is not Noneчитает легко, не может быть неправильно истолковано, и вам не нужно думать, вы просто пишете очевидную вещь.
Конечно, большинство более сложных вещей в Python могут быть выполнены несколькими способами. Вы можете добавлять методы в классы посредством объявления или простого назначения слотов, вы можете передавать аргументы в функции различными способами и т. Д. Это только потому, что внутренняя часть языка в основном представлена.
Ключевым моментом является то, что всегда есть один способ, который предназначен для того, чтобы быть лучшим, все дело. Если существуют другие способы, они не были добавлены как равные альтернативы (как ifи unless), а просто раскрывают внутреннюю работу. Медленно, но неуклонно такие альтернативы устаревают (не исключаются!) За счет усиления известного лучшего механизма.
Декораторы переносят вызовы функций АОП. До версии 2.6 вам приходилось использовать __metaclass__магический член для объявления метакласса класса; теперь вы можете использовать тот же синтаксис декоратора для этого тоже. До версии 3.0 у вас было два вида строк: байтово-ориентированные и Unicode, которые вы могли непреднамеренно смешивать. Теперь у вас есть единственный Unicode strи единственный двоично-прозрачный bytes, который вы не можете смешать по ошибке.
"""комментарии (строки документации). Они охватывают несколько строк.