По сравнению с такими языками, как 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
, который вы не можете смешать по ошибке.
"""
комментарии (строки документации). Они охватывают несколько строк.__doc__
атрибут. Но строки - это область, где Python определенно предоставляет множество «правильных путей»: использовать одинарные, двойные или тройные кавычки, неявно соединять смежные литералы, использоватьr
для необработанных литералов и т. Д.Еще пара примеров:
len()
это функция вместо метода, присутствующего в каждой последовательности; если сравнивать с Java у вас есть.length
,.size()
,.getSize()
и другие методы , чтобы найти число элементов в последовательности.Другим примером является тот факт, что
.join()
этоstring
метод, а не метод, присутствующий в каждой последовательности. Вам не нужно знать, является ли параметр соединения списком, набором, пониманием или чем-то еще, он будет работать.источник
В C есть много возможных способов увеличить значение переменной на единицу:
Каждый в конечном итоге увеличивает ценность
i
на1
, но каждый немного отличается.В Python есть только один путь; просто добавьте один.
И хотя существует более одного синтаксически правильного способа сделать это (например
i = i + 1
), вы делаете то же самое с одними и теми же побочными эффектами.источник
i = i + 1
это присваивание, а не приращение. В питоне приращение естьi += 1
. В языках C-стиле , вы можете написатьi++
,++i
иi += 1
.i += 1
, кстати) дают точно такой же результат. Единственный раз, когда я вижу, что люди запутываются, это когда они предварительно или постинкрементно увеличивают переменную как часть большего выражения, и это обычно быстро исправляется, читая соответствующий раздел справочника по языку. Лично я бы выбрал тот факт, что вы можете ссылаться на пятый символ строки обоимиstr[4]
или*(str+4)
, но, может быть, это было слишком просто ...max(i++, ++i)
не могут быть быстро исправлены. C имеет много «неопределенных» и «зависящих от реализации» случаев поведения, все по уважительной причине - но каждый может создать ловушку.Другой возможностью могут быть списки. В Python вы можете сделать это:
Но «очевидный» способ (если вы голландец или более хорошо знакомы с Python) заключается в понимании списка:
Это короче, new_list создается за один шаг, он работает быстрее, я считаю, и это элегантно. С другой стороны, можно утверждать, что это кажется менее явным, но я думаю, что как только вы к этому привыкнете, это так же явно.
источник