2009-06-01 3 views
3

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

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

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

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

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

ответ

2

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

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

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

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

+0

О, струнные понятия не являются проблемой, хотя я был очень удивлен, когда проблемы с конверсией появились на выходе в терминале Apple. Я согласен, что Unicode - спаситель, а Python 3 - это здорово, так как я разрабатываю вьетнамские сайты! –

+1

Добавлена ​​ссылка на Monkey, banana, hose article;) – NicDumZ

+0

Ничего себе, замечательная статья. Но я думаю, что простые программы выглядели эстетически лучше с заявлением о печати без скобок, независимо от вопроса совместимости или инерции (о котором я надеюсь иметь меньше, так как я новичок). –

2

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

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

+0

Другое, чем мой сервер, не имеющий Python 3;) –

5

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

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

+0

Я думаю, что они могли бы сделать отдельную функцию пифонической печати, например printme(). Спасибо за подсказку 'с'! –

+0

Конечно, мы могли бы переименовать 'print', но поскольку удаление его как оператора и ключевого слова имеет решающее значение для дизайна, менее понятное имя не принесло бы реального преимущества. –

+2

Мне также нравится согласованность печати как функции; это устраняет одну точку путаницы при преподавании python. –

1

мне очень нравится словарь понимания:

{k: v for k, v in stuff} 

И extended iterable unpacking:

(head, *rest) = range(5) 
+0

Спасибо! Я пропустил последний. –

1

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

+0

Конечно, выбор языка очень личный ... Но тогда языки должны каким-то образом развиваться, и этот процесс является общедоступным по определению. –

+0

Все они теперь доступны в Python 2.7, все, кроме чистых stdlib. – Tshepang

Смежные вопросы