Подтвердить что ты не робот

Изменения в Python после погружения в Python

Я преподавал себе Python, работая над Dive Into Python от Марка Пилигрима. Я рекомендую его, как и других пользователей.

Однако последнее обновление для Dive Into Python было пять лет назад. Я с нетерпением жду чтения нового Погружение в Python 3 Когда я сделаю переход на 3.x, но пока, используя django, ll придерживаться 2.x.

Мне интересно узнать, какие новые функции Python я пропускаю, если я использовал Dive Into Python в качестве основного ресурса для изучения языка. Несколько примеров, с которыми я столкнулся, - это

  • itertools
  • ElementTree

Есть ли что-нибудь еще, что я упускаю?

edit: Как указывает Бастиен в своем ответе, я мог бы просто прочитать What New in Python, но иногда это забавно обнаружить полезный совет по переполнению стека, а не борьбу через полный, всесторонний ответ в официальной документации.

4b9b3361

Ответ 1

Отъезд Что нового в Python. Он имеет все версии в серии 2.x. Per Alex комментирует, вы захотите посмотреть на все Python 2.x для x > 2.

Основные характеристики для ежедневного кодирования:

Перечисление: вместо выполнения:

for i in xrange(len(sequence)):
    val = sequence[i]
    pass

Теперь вы можете более лаконично писать:

for i, val in enumerate(iterable):
    pass

Это важно, потому что оно работает для неистребимых итераций без правды (в противном случае вам нужно было бы использовать инкрементный счетчик индексов вместе с итерацией значений).

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

Логические значения: True и False, добавленные для ясности: return True более четкое намерение, чем return 1.

Генераторы: выразительная форма ленивой оценки

evens = (i for i in xrange(limit) if i % 2 == 0)

Расширенные фрагменты: встроенные шаги поддержки в срезах.

assert [1, 2, 3, 4][::2] == [1, 3]

Устанавливает: для семантики поиска O (1) вам больше не нужно делать:

pseudo_set = {'foo': None, 'bar': None}
assert 'foo' in pseudo_set

Теперь вы можете сделать:

set_ = set(['foo', 'bar'])
assert 'foo' in set_

Обратная итерация: reversed(sequence) более читаема, чем sequence[::-1].

Подпроцесс: унифицирует все способы, с помощью которых вы можете вызвать подпроцесс - захват выходов, подача ввода, блокирование или неблокирование.

Условные выражения: есть проблема с идиомой:

a and b or c

А именно, когда b является ложным. b if a else c разрешает эту проблему.

Управление контекстом: сбор/освобождение ресурсов упрощается с помощью инструкции with.

with open(filename) as file:
    print file.read()
# File is closed outside the `with` block.

Лучшее форматирование строк: слишком много для описания - см. документацию Python в разделе str.format().

Ответ 2

Марк (автор книги) имел несколько комментариев об этом. Я бесстыдно скопировал соответствующий параграф здесь:
"Если вы выберете Python 2, я могу только рекомендовать" Dive Into Python "главы 2-7, 13-15 и 17. Остальная часть книги ужасно устарела." "

Ответ 3

Вот несколько примеров такого ответа, о котором я думал:

Условные выражения

Вместо и-трюк, 2.5 предлагает новый способ записи условные выражения.

#and-or trick:
x = condition and 'true_value' or 'false_value'

#new in 2.5:
x = 'true_value' if condition else 'false_value'

Тестирование клавиш в словарях

has_key() устарел в пользу ключа в d.

>>>d={'key':'value','key2':'value2'}
>>>'key1' in d
 True

Ответ 4

Несколько "второстепенных" функций были добавлены в 2.4 и распространены в новом коде 2.x python: decorator (2.4) и try/except/finally. Прежде чем вы не сможете:

try:
    do_something()
except FunkyException:
    handle_exception():
finally:
    clean_up()

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

Ответ 6

Я предлагаю вам прочитать "что в Python 2.x?" документы. Некоторые вещи, которые, возможно, пропустили:

  • Классы нового стиля (позволяют подтипирование стандартных типов, свойства,...).
  • Ключевое слово with, которое помогает выделять и освобождать ресурсы.