Рубрики
Без рубрики

Что нового в Python 3.8?

Последняя, самая большая версия Python будет в ближайшее время в бета-версии. Пока еще какое-то время … Теги с Python, обсудить.

Советы Python (3 часть серии)

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

Этот пост описывает наиболее значимые дополнения и изменения, которые вы должны знать о Python 3.8. Взглянем!

1. Оператор Уолруса

Выражения присвоения пришли в Python с оператором «Walrus» знак равно . Это позволит вам назначать значения для переменной в качестве части выражения. Основное преимущество этого заключается в том, что он экономит вам несколько строк кода, когда вы хотите использовать, скажем, значение выражения в последующем состоянии.

Так, что-то вроде этого:

length = len(my_list)
if length > 10:
    print(f"List is too long ({length} elements, expected <= 10)")

Теперь теперь можно написать, как это:

if (length := len(my_list)) > 10:
    print(f"List is too long ({length} elements, expected <= 10)")

Yay для краткости, но некоторые могут сказать, что это влияет на читаемость кода – можно утверждать, что первый вариант здесь более понятный и явный. Эта дискуссия была центром Основные противоречие в сообществе Python.

2. Только позиционные аргументы

Специальный маркер, / , теперь можно использовать при определении аргументов метода для указания того, что функционал принимает только позиционные аргументы слева от маркера. Только для ключевых слов аргументы были доступны в Python с * Маркер в функциях и добавление / Маркер для позиционных аргументов только улучшает согласованность языка и обеспечивает надежный дизайн API.

Возьмите пример этой функции:

def pow(x, y, z=None, /):
    r = x**y
    if z is not None:
        r %= z
    return r

/ Маркер здесь означает, что передача значений для х , y и z можно сделать только позитивно, а не использовать аргументы ключевых слов. Поведение проиллюстрировано ниже:

>>> pow(2, 10)  # valid
>>> pow(2, 10, 17)  # valid
>>> pow(x=2, y=10)  # invalid, will raise a TypeError
>>> pow(2, 10, z=17)  # invalid, will raise a TypeError

Более подробное объяснение мотивации и использования случаев использования можно найти в PEP 570 Отказ

3. F-струны теперь поддерживают «=»

Python программисты часто используют отладку «стиль печати». В старые времена это была довольно многолетняя:

print , foo, , bar

F-струны делают это немного приятнее:

print(f"foo={foo} bar={bar}")

Но вы все еще должны повторять себя: вы должны написать Строка «Фу», а потом Шепажение «Фу».

= спецификатор, используемый как F '{expr =}' Расширяется к тексту выражения, одинакового знака, а затем перенаправить оценку выражения. Так что теперь вы можете просто написать:

print(f"{foo=} {bar=}")

Небольшой шаг для языка, но гигантский скачок для всех, кто брызгает Печать () Заявления для отладки!

4. Реверс () сейчас работает с Dict

Поскольку Python 3.7, словари сохраняют порядок введения ключей. перевернуты () Встроенный теперь можно использовать для доступа к словарю в обратном порядке вставки – так же, как ЗаказДикт Отказ

>>> my_dict = dict(a=1, b=2)
>>> list(reversed(my_dict))
['b', 'a']
>>> list(reversed(my_dict.items()))
[('b', 2), ('a', 1)]

5. Упрощенное число распаковки для возврата и доходности

Это непреднамеренное поведение существовало со времен Python 3.2, которые запрещены распаковки имитал без скобок в возвращение и доходность заявления.

Итак, следующее было разрешено:

def foo():
    rest = (4, 5, 6)
    t = 1, 2, 3, *rest
    return t

Но это привело к SyntaxError :

def baz():
    rest = (4, 5, 6)
    return 1, 2, 3, *rest
def baz():
    rest = (4, 5, 6)
    yield 1, 2, 3, *rest

Последний релиз исправляет это поведение, поэтому приведенные выше два подхода теперь допускаются.

6. Новые синтаксические предупреждения

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

data = [
    (1, 2, 3)  # oops, missing comma!
    (4, 5, 6)
]

Вместо того, чтобы показывать TypeError: «TUPLE» объект не Callable Что на самом деле не говорит вам, что не так, будет показано полезное предупреждение, указав, что вы, вероятно, пропустили запятую. Довольно полезно при отладке!

Компилятор теперь также производит Syntaxwarning Когда идентификационные проверки ( это и не ) используются с определенными типами литералов (например, строки, целые числа и т. Д.). Вы редко хотите сравнить удостоверение личности с литералами, отличными от Нет И предупреждение компилятора может помочь избежать ряда неуловимых ошибок.

7. Улучшения производительности

Этот выпуск добавляет ряд скоростей производительности в переводчик, следующий иск от предыдущего выпуска 3.7.

  • Оператор. itemgetter () сейчас на 33% быстрее. Это было сделано возможным путем оптимизации обращения с аргументом и добавление быстрого пути для общего случая одного неотрицательного целочисленного индекса в кортеж (что является типичным случаем использования в стандартной библиотеке).

  • Поиск поле в коллекции .NameedTuple () Сейчас в настоящее время более чем в два раза быстрее, что делает их самой быстрой формой переменного поиска экземпляра в Python.

  • Список Конструктор не превышает выделение внутреннего буфера элемента, если входной указатель имеет известную длину (входные реализаторы Len). Это делает созданный список на 12% меньше в среднем.

  • Переменная класса Пишенные записи теперь в два раза быстрее: когда был обновлен ненужный атрибут, появился ненужный вызов для обновления слотов, который оптимизирован.

  • Призыв некоторых простых встроенных и методов сейчас на 20-50% быстрее. Накладные расходы преобразования аргументов на эти методы уменьшаются.

  • UUID. UUID Теперь использует слоты, чтобы уменьшить его след памяти.

Резюме

Предстоящий выпуск Python добавляет некоторые отличные новые функции на язык и значительно улучшает производительность с фундаментальными ускоренными исправлениями. Есть небольшое количество изменения поведения Это может потребовать модификации существующего кода во время обновления в Python 3.8, но прирост производительности и новый синтаксис делают его полностью стоить усилия. Подробный журнал изменений всего этого нового можно найти здесь Отказ

Первоначально опубликовано на Глубокий блог Отказ

Советы Python (3 часть серии)

Оригинал: “https://dev.to/deepsource/what-s-new-in-python-3-8-1onl”