Есть ли у питона один способ делать вещи? - PullRequest
0 голосов
/ 08 апреля 2010

Я всегда видел в статьях / книгах по питону, что питон прост, и у него есть только один способ сделать что-то.Я хотел бы, чтобы кто-то объяснил мне эту концепцию , имея в виду приведенный ниже пример, если бы я хотел получить минимальное и максимальное значения последовательности, я бы сделал следующее:

seq=[1,2,3,4,5,6]

min(seq) #1

max(seq) #6

но я также могу сделать это;

seq[:1]  #1

seq[-1]  #6

, конечно, это два способа сделать одну простую вещь.Это меня немного смущает.

Ответы [ 6 ]

27 голосов
/ 08 апреля 2010

Не то, чтобы у него "был один способ сделать что-то", а больше "Должен быть один - и предпочтительно только один - очевидный способ сделать это".(из Zen of Python).

Это не исключает возможности использования более чем одного способа.Мы говорим о программировании, где креативность является одним из наиболее важных навыков, а поиск новых способов решения проблем является обязательным.

В вашем примере вы делаете две разные вещи:

  1. получение минимума и максимума списка
  2. получение первого и последнего элемента списка

бывает, что в данном конкретном случае результат в точности совпадает.

15 голосов
/ 08 апреля 2010

Это две разные вещи. max() дает вам самый большой элемент списка (по умолчанию используется обычное сравнение чисел), тогда как [-1] дает вам last элемент & ndash; в вашем примере это одно и то же. Но учтите это:

>>> seq = [2, 7, 5, 4]
>>> max(seq)
7
>>> seq[-1]
4

Кстати, seq[:1] снова дает вам нечто иное - ndash; а именно [1] (или [2] в моем примере), список из одного элемента. Вы, вероятно, имели в виду seq[0], который является первым элементом списка, по сравнению с min(seq), наименьшим одним.

7 голосов
/ 08 апреля 2010

Один очевидный способ.

>>> import this
3 голосов
/ 08 апреля 2010

В вашем примере вы на самом деле делаете две разные вещи - они просто дают одинаковый результат , потому что ваш входной список отсортирован.Тем не менее, всегда есть несколько способов сделать что-то.Подход Python на самом деле заключается не в том, чтобы избегать или запрещать несколько способов делать одно и то же, а в том, чтобы иметь один - и предпочтительно только один - очевидный способ выполнения действий.

1 голос
/ 08 апреля 2010

max (), min () и разрезание индекса - все они делают разные вещи. В вашем списке порядок не может быть отсортирован, как в вашем примере, поэтому использование нарезки не принесет вам максимума / мин в этих случаях. если вы хотите получить максимальные / минимальные значения, просто используйте max()/min() functions

0 голосов
/ 08 апреля 2010

Всегда есть несколько способов решения проблемы, но разработчики Python стараются не добавлять языковые функции, которые предлагают избыточную функциональность, что очень непохоже на perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...