Каковы используемые / неиспользуемые функции Python 3? - PullRequest
3 голосов
/ 01 июня 2009

Я недавно занимался веб-дизайном как хобби с основной мотивацией изучать интересные вещи. Конечно, было приятно изучать Python, но я обнаружил, что только что был Великий переписывание Python слишком поздно, поэтому мне пришлось изучить Python 3 и 2.6 по существу.

Я новичок, поэтому я бы хотел, чтобы люди поделились своими мыслями о сильных и слабых сторонах Python 3 с точки зрения тех, кто занимается программированием для конечных пользователей, а не для разработчиков языков. Мой вопрос был бы больше о том, что людям на самом деле нравится, когда они используют, или избегают как непродуктивные или непитонные.

Для меня оператор with - это определенный плюс, а оператор print - это минус.

Разъяснение правки : есть много постов, которые спрашивают, нужно ли изучать Python 2 или 3 или есть какая-то разница. Я вижу, что у меня другой вопрос: отзывы людей, которые по какой-то причине сделали выбор в пользу Python 3, но могут иметь мнение о том, что лучше, а что нет.

Еще одно уточнение : В ответах указывалось, что with перенесено на 2. *. Извинения.

Ответы [ 5 ]

5 голосов
/ 01 июня 2009

Я пока не использую Python 3 "в производстве", но, поиграв с ним, я обнаружил, что print быть функцией - превосходная идея - например, я могу легко поместить ее в lambda сейчас, где в 2. * Я должен использовать sys.stdout.write("%s\n" % foo), немного грубовато. Кроме того, синтаксис для таких твиков, как использование выходного файла, отличного от sys.stdout или удаление окончательного \n, , поэтому гораздо более читабелен, чем Python 2. * * s!

Кстати, with также есть в последних версиях Python 2. *, это не Python 3 - эксклюзив.

2 голосов
/ 01 июня 2009

Что ж, сильная сторона - это уточнение между байтами и строкой. Сколько раз за ваш короткий опыт работы с Python вы путались с неясными UnicodeDecodeError и UnicodeEncodeError? Если у вас никогда не возникало проблем с юникодом и байтовыми строками, вполне вероятно, что вы используете язык только для ascii (английский?;)), Но обычно это концепция, которую труднее всего понять новичкам. (кстати, если вы все еще в замешательстве, эта ссылка должна помочь для Python 2.x)

Я действительно считаю, что это различие между str и байтами является одной из сильных сторон Python3.0. Прочитайте PEP358 для формального описания и класс diveintopython для чего-то более ориентированного на конечного пользователя. Эта новая функция вынуждает разработчиков поддерживать четкое различие между объектами Unicode и байтовыми объектами, которые закодированы в определенной кодировке. Я считаю, что это изменение поможет новичкам легче понять разницу между этими двумя структурами, а также поможет опытным разработчикам, использующим разумные методы программирования.

Но, конечно, у этого изменения есть свои неудобства: портирование приложений 2.x довольно сложно, и изменение str + unicode в str + байтов - самая раздражающая вещь, которую нужно изменить, если вы еще не четко разделяете Unicode и байтовые строки. в вашем коде 2.x. Раздражает, но долго нужно.

Эти последние изменения выглядят раздражающими для многих пользователей и ... раздражающими для реализации важных библиотек / решений. Текущая сила Python2.x - это многочисленные сторонние приложения / модули: но, поскольку портировать портирование на Python3 иногда нетривиально, этим сторонним приложениям потребуется некоторое время для переноса (а поскольку 2.x все еще эти приложения должны поддерживать две версии: одну, предназначенную для клиентов 2.x, и одну для 3.x ... дорогостоящее обслуживание!) В следующем году число полноценных приложений, работающих под управлением Python3, вероятно, будет весьма низкий из-за малого числа Python3-совместимых третьих сторон. Но опять же, я решительно поддерживаю эти критические изменения: вы читали эту сказку Обезьяна, банан, Python (3) и пожарный шланг ? ;)

2 голосов
/ 01 июня 2009

Я думаю, что все, что они сделали, было к лучшему, в долгосрочной перспективе. Они удалили множество устаревших способов сделать что-то, таким образом применяя «Есть только один способ сделать это» и увеличивая последовательность. Кроме того, оператор with потрясающий.

Очевидная проблема с использованием Python 3 заключается в отсутствии поддержки многих [больших] библиотек (таких как Django). Если ни одна из ваших библиотек не работает с Python 3, нет никаких причин не использовать его.

1 голос
/ 01 июня 2009

Это действительно субъективно. Python3.x, безусловно, является улучшением по сравнению с 2.x. Он содержит долгожданные изменения, такие как: понимание словаря, упорядоченный словарь, более мощное форматирование строк ... и т. Д. Не говоря уже о более чистой библиотеке.

1 голос
/ 01 июня 2009

Мне действительно нравится понимание словаря:

{k: v for k, v in stuff}

И расширенная итеративная распаковка :

(head, *rest) = range(5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...