Содержание

Python 3 для начинающих и чайников

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

Этот сайт призван помочь начинающим и чайникам научиться программировать на python 3. Также здесь можно подробнее узнать об особенностях функционирования этого языка.

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

  1. Python — интерпретируемый язык программирования. С одной стороны, это позволяет значительно упростить отладку программ, с другой — обуславливает сравнительно низкую скорость выполнения.
  2. Динамическая типизация. В python не надо заранее объявлять тип переменной, что очень удобно при разработке.
  3. Хорошая поддержка модульности. Вы можете легко написать свой модуль и использовать его в других программах.
  4. Встроенная поддержка Unicode в строках. В Python необязательно писать всё на английском языке, в программах вполне может использоваться ваш родной язык.
  5. Поддержка объектно-ориентированного программирования. При этом его реализация в python является одной из самых понятных.
  6. Автоматическая сборка мусора, отсутствие утечек памяти.
  7. Интеграция с C/C++, если возможностей python недостаточно.
  8. Понятный и лаконичный синтаксис, способствующий ясному отображению кода. Удобная система функций позволяет при грамотном подходе создавать код, в котором будет легко разобраться другому человеку в случае необходимости. Также вы сможете научиться читать программы и модули, написанные другими людьми.
  9. Огромное количество модулей, как входящих в стандартную поставку Python 3, так и сторонних. В некоторых случаях для написания программы достаточно лишь найти подходящие модули и правильно их скомбинировать. Таким образом, вы можете думать о составлении программы на более высоком уровне, работая с уже готовыми элементами, выполняющими различные действия.
  10. Кроссплатформенность. Программа, написанная на Python, будет функционировать совершенно одинаково вне зависимости от того, в какой операционной системе она запущена. Отличия возникают лишь в редких случаях, и их легко заранее предусмотреть благодаря наличию подробной документации.

Изучение языка программирования python — это просто и понятно даже для чайников. Уже сейчас вы можете скачать python и написать свою первую программу!

Также у нас появился самоучитель Python, собранный из материалов данного сайта. Удачного изучения Python!

Свежее

  • Модуль csv — чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ

Категории

  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов

Полезные материалы

  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Мы в соцсетях

Возможности Python 3, достойные того, чтобы ими пользовались / Хабр

Многие программисты начали переходить со второй версии Python на третью из-за того, что уже довольно скоро поддержка Python 2 будет прекращена. Автор статьи, перевод которой мы публикуем, отмечает, что основной объём Python 3-кода, который ему доводилось видеть, выглядит как код со скобками, написанный на Python 2. По его словам, он и сам грешит чем-то подобным. Здесь он приводит примеры некоторых замечательных возможностей, доступных лишь тем, кто пользуется Python 3. Он надеется, что эти возможности облегчат жизнь тем, кто о них узнает.

Все примеры, приведённые в этом материале, написаны с использованием Python 3.7. В описании каждой возможности имеются сведения о минимальной версии Python, необходимой для её применения.

Форматные строки (3.6+)

Без использования строк сложно написать что-то полезное на любом языке программирования. Но для эффективной работы со строками разработчику нужны удобные инструменты. Такие инструменты, которые позволяют оперировать сложными структурами, не теряя при этом душевного равновесия. Большинство Python-разработчиков пользуется методом format:

user = "Jane Doe"
action = "buy"
log_message = 'User {} has logged in and did an action {}. '.format(
  user,
  action
)
print(log_message)
# User Jane Doe has logged in and did an action buy.

Python 3, наряду с методом format, поддерживает форматные строки (f-strings, f-строки). Они представляют собой гибкий инструмент для выполнения различных манипуляций со строками. Вот как выглядит предыдущий пример, переписанный с использованием форматных строк:

user = "Jane Doe"
action = "buy"
log_message = f'User {user} has logged in and did an action {action}.'
print(log_message)
# User Jane Doe has logged in and did an action buy.

Модуль pathlib (3.4+)

Форматные строки — замечательная технология, но для работы с некоторыми строками, вроде путей к файлам, созданы специальные инструменты, сильно упрощающие манипуляции с ними. В Python 3 имеется модуль pathlib, который представляет собой удобную абстракцию для работы с путями к файлам. Если вы пока не уверены в полезности этого модуля для решения ваших задач — взгляните на этот материал.

from pathlib import Path
root = Path('post_sub_folder')
print(root)
# post_sub_folder
path = root / 'happy_user'
# Делаем путь абсолютным
print(path.resolve())
# /home/weenkus/Workspace/Projects/DataWhatNow-Codes/how_your_python3_should_look_like/post_sub_folder/happy_user

Аннотации типов (3.5+)

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

def sentence_has_animal(sentence: str) -> bool:
  return "animal" in sentence
sentence_has_animal("Donald had a farm without animals")
# True

Перечисления (3.4+)

Python 3 поддерживает, благодаря классу Enum, простой механизм работы с перечислениями. Перечисления удобно использовать для хранения списков констант. Константы, в противном случае, оказываются беспорядочно разбросанными в коде.

from enum import Enum, auto
class Monster(Enum):
    ZOMBIE = auto()
    WARRIOR = auto()
    BEAR = auto()
    
print(Monster.ZOMBIE)
# Monster.ZOMBIE

Из документации по Python 3 можно узнать о том, что перечисление — это набор символических имён (членов), привязанных к уникальным, неизменным значениям. Члены одного перечисления можно сравнивать на идентичность. Перечисления можно обходить.

for monster in Monster:
    print(monster)
# Monster.ZOMBIE
# Monster.WARRIOR
# Monster.BEAR

Встроенный LRU-кэш (3.2+)

В наши дни механизмы кэширования применяются практически во всех программных и аппаратных системах. Python 3 значительно упрощает кэширование благодаря декоратору lru_cache, который реализует алгоритм LRU-кэширования (Least Recently Used).

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

import time
def fib(number: int) -> int:
    if number == 0: return 0
    if number == 1: return 1
    
    return fib(number-1) + fib(number-2)
start = time.time()
fib(40)
print(f'Duration: {time.time() - start}s')
# Duration: 30.684099674224854s

Теперь используем lru_cache

для оптимизации этой функции (такая техника оптимизации называется мемоизацией). В результате время выполнения функции, которое раньше измерялось секундами, теперь измеряется наносекундами.

from functools import lru_cache
@lru_cache(maxsize=512)
def fib_memoization(number: int) -> int:
    if number == 0: return 0
    if number == 1: return 1
    
    return fib_memoization(number-1) + fib_memoization(number-2)
start = time. time()
fib_memoization(40)
print(f'Duration: {time.time() - start}s')
# Duration: 6.866455078125e-05s

Распаковка итерируемых объектов (3.0+)

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

head и tail попадают первое и последнее значения из списка, сформированного командой range(5). В переменную body попадает всё то, что находится между первым и последним значением.

head, *body, tail = range(5)
print(head, body, tail)
# 0 [1, 2, 3] 4
py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()
print(py)
print(filename)
print(cmds)
# python3.7
# script.py
# ['-n', '5', '-l', '15']
first, _, third, *_ = range(10)
print(first, third)
# 0 2

Классы данных (3.7+)

В Python 3 появились классы данных (data classes). Они дают программисту достаточно большую свободу действий. Их можно использовать для уменьшения объёма шаблонного кода. Дело в том, что декоратор dataclass автоматически генерирует специальные методы, такие как __init__() и __repr__(). В официальном тексте соответствующего предложения они описаны как «изменяемые именованные кортежи со значениями по умолчанию». Вот пример создания класса без использования декоратора dataclass

:

class Armor:
    
    def __init__(self, armor: float, description: str, level: int = 1):
        self.armor = armor
        self.level = level
        self.description = description
                 
    def power(self) -> float:
        return self.armor * self.level
    
armor = Armor(5.2, "Common armor.", 2)
armor.power()
# 10.4
print(armor)
# <__main__.Armor object at 0x7fc4800e2cf8>

Вот то же самое, но уже написанное с применением dataclass:

from dataclasses import dataclass
@dataclass
class Armor:
    armor: float
    description: str
    level: int = 1
    
    def power(self) -> float:
        return self.
armor * self.level     armor = Armor(5.2, "Common armor.", 2) armor.power() # 10.4 print(armor) # Armor(armor=5.2, description='Common armor.', level=2)

Поддержка папок пакетов без файла __init__.py (3.3+)

Один из способов структурирования Python-кода заключается в использовании пакетов (пакеты размещаются в папках, в которых есть файл __init__.py). Вот пример из официальной документации:

sound/                          Пакет верхнего уровня
      __init__.py               Инициализация пакета sound
      formats/                  Подпакет для преобразования форматов файлов
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Подпакет для звуковых эффектов
              __init__.py
              echo.py
              surround.py
              reverse.
py              ...      filters/                  Подпакет для фильтров              __init__.py              equalizer.py              vocoder.py              karaoke.py              ...

При использовании Python 2 в каждой из папок, упомянутых в примере, должен был быть файл

__init__.py. Благодаря этому файлу папка воспринимается в виде Python-пакета. В Python 3, с появлением возможности Implicit Namespace Packages, наличие в папках подобных файлов больше не является обязательным.

sound/                          Пакет верхнего уровня
      __init__.py               Инициализация пакета sound
      formats/                  Подпакет для преобразования форматов файлов
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Подпакет для звуковых эффектов
              echo.
py              surround.py              reverse.py              ...      filters/                  Подпакет для фильтров              equalizer.py              vocoder.py              karaoke.py              ...

Надо отметить, что на самом деле всё не так просто. А именно, в соответствии с этой официальной спецификацией, файл __init__.py всё ещё нужен для обычных пакетов. Если убрать его из папки, то пакет превращается в так называемый пакет пространства имён, к которому применяются дополнительные ограничения.

Итоги

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

Уважаемые читатели! Какие возможности Python 3 вы добавили бы в приведённый здесь список?

Что нового в Python — Документация по Python 3.11.2

Серия эссе «Что нового в Python» знакомит с самыми важные изменения между основными версиями Python. Они «обязательны к прочтению» для всем, кто хочет быть в курсе после выхода нового релиза.

  • Что нового в Python 3.11
    • Сводка — основные моменты выпуска
    • Новые функции
    • Новые функции, связанные с подсказками типов
    • Другие изменения языка
    • Другие изменения реализации CPython
    • Новые модули
    • Улучшенные модули
    • Оптимизация
    • Быстрее CPython
    • Изменения байт-кода CPython
    • Устарело
    • Ожидание удаления в Python 3.12
    • Удалено
    • Портирование на Python 3.11
    • Изменения сборки
    • Изменения API C
  • Что нового в Python 3.10
    • Сводка — основные моменты выпуска
    • Новые функции
    • Новые функции, связанные с подсказками типов
    • Другие изменения языка
    • Новые модули
    • Улучшенные модули
    • Оптимизация
    • Устарело
    • Удалено
    • Портирование на Python 3. 10
    • Изменения байт-кода CPython
    • Изменения сборки
    • Изменения API C
  • Что нового в Python 3.9
    • Сводка — основные моменты выпуска
    • Вы должны проверить DeprecationWarning в своем коде
    • Новые функции
    • Другие изменения языка
    • Новые модули
    • Улучшенные модули
    • Оптимизация
    • Устарело
    • Удалено
    • Портирование на Python 3.9
    • Изменения сборки
    • Изменения API C
    • Заметные изменения в Python 3.9.1
    • Заметные изменения в Python 3.9.2
  • Что нового в Python 3.8
    • Сводка — основные моменты выпуска
    • Новые функции
    • Другие изменения языка
    • Новые Модули
    • Улучшенные модули
    • Оптимизация
    • Изменения сборки и C API
    • Устарело
    • Удаление API и функций
    • Портирование на Python 3.8
    • Заметные изменения в Python 3. 8.1
    • Заметные изменения в Python 3.8.8
    • Заметные изменения в Python 3.8.12
  • Что нового в Python 3.7
    • Сводка — основные моменты выпуска
    • Новые функции
    • Другие изменения языка
    • Новые модули
    • Улучшенные модули
    • Изменения API C
    • Изменения сборки
    • Оптимизация
    • Другие изменения реализации CPython
    • Устаревшее поведение Python
    • Устаревшие модули, функции и методы Python
    • Устаревшие функции и типы C API
    • Удаление поддержки платформы
    • Удаление API и функций
    • Удаление модуля
    • Изменения только для Windows
    • Портирование на Python 3.7
    • Заметные изменения в Python 3.7.1
    • Заметные изменения в Python 3.7.2
    • Заметные изменения в Python 3.7.6
    • Заметные изменения в Python 3.7.10
  • Что нового в Python 3.6
    • Сводка — основные моменты выпуска
    • Новые функции
    • Другие изменения языка
    • Новые модули
    • Улучшенные модули
    • Оптимизация
    • Изменения сборки и C API
    • Другие улучшения
    • Устарело
    • Удалено
    • Портирование на Python 3. 6
    • Заметные изменения в Python 3.6.2
    • Заметные изменения в Python 3.6.4
    • Заметные изменения в Python 3.6.5
    • Заметные изменения в Python 3.6.7
    • Заметные изменения в Python 3.6.10
    • Заметные изменения в Python 3.6.13
  • Что нового в Python 3.5
    • Сводка — основные моменты выпуска
    • Новые функции
    • Другие изменения языка
    • Новые модули
    • Улучшенные модули
    • Другие изменения на уровне модуля
    • Оптимизация
    • Изменения сборки и C API
    • Устарело
    • Удалено
    • Портирование на Python 3.5
    • Заметные изменения в Python 3.5.4
  • Что нового в Python 3.4
    • Сводка — основные моменты выпуска
    • Новые функции
    • Новые модули
    • Улучшенные модули
    • Изменения реализации CPython
    • Устарело
    • Удалено
    • Портирование на Python 3. 4
    • Изменено в версии 3.4.3
  • Что нового в Python 3.3
    • Сводка — основные моменты выпуска
    • PEP 405: виртуальные среды
    • PEP 420: неявные пакеты пространства имен
    • PEP 3118: новая реализация memoryview и документация по протоколу буфера
    • PEP 393: гибкое строковое представление
    • PEP 397: Средство запуска Python для Windows
    • PEP 3151: переработка иерархии исключений ОС и ввода-вывода
    • PEP 380: синтаксис делегирования подгенератору
    • PEP 409: подавление контекста исключения
    • PEP 414: явные литералы Unicode
    • PEP 3155: Полное имя для классов и функций
    • PEP 412: словарь совместного использования ключей
    • PEP 362: объект сигнатуры функции
    • PEP 421: добавление sys.implementation
    • Использование importlib в качестве реализации Import
    • Другие изменения языка
    • Мелкозернистый импортный замок
    • Встроенные функции и типы
    • Новые модули
    • Улучшенные модули
    • Оптимизация
    • Изменения сборки и C API
    • Устарело
    • Портирование на Python 3. 3
  • Что нового в Python 3.2
    • PEP 384: определение стабильного ABI
    • PEP 389: Модуль синтаксического анализа командной строки Argparse
    • PEP 391: конфигурация на основе словаря для ведения журнала
    • PEP 3148: модуль concurrent.futures
    • PEP 3147: каталоги репозитория PYC
    • PEP 3149: файлы версии ABI с тегами .so
    • PEP 3333: Интерфейс шлюза веб-сервера Python v1.0.1
    • Другие изменения языка
    • Новые, улучшенные и устаревшие модули
    • Многопоточность
    • Оптимизация
    • Юникод
    • Кодеки
    • Документация
    • ПРОСТОЕ
    • Хранилище кодов
    • Изменения сборки и C API
    • Портирование на Python 3.2
  • Что нового в Python 3.1
    • PEP 372: упорядоченные словари
    • PEP 378: описатель формата для разделителя тысяч
    • Другие изменения языка
    • Новые, улучшенные и устаревшие модули
    • Оптимизация
    • ПРОСТОЕ
    • Изменения сборки и C API
    • Портирование на Python 3. 1
  • Что нового в Python 3.0
    • Распространенные камни преткновения
    • Обзор изменений синтаксиса
    • Изменения уже присутствуют в Python 2.6
    • Изменения в библиотеке
    • PEP 3101 : новый подход к форматированию строк
    • Изменения в исключениях
    • Разное Прочие изменения
    • Изменения сборки и C API
    • Производительность
    • Портирование на Python 3.0
  • Что нового в Python 2.7
    • Будущее Python 2.x
    • Изменения в обработке предупреждений об устаревании
    • Функции Python 3.1
    • PEP 372: добавление упорядоченного словаря в коллекции
    • PEP 378: описатель формата для разделителя тысяч
    • PEP 389: модуль argparse для синтаксического анализа командных строк
    • PEP 391: конфигурация на основе словаря для ведения журнала
    • PEP 3106: просмотр словаря
    • PEP 3137: объект memoryview
    • Другие изменения языка
    • Новые и улучшенные модули
    • Изменения сборки и C API
    • Прочие изменения и исправления
    • Портирование на Python 2. 7
    • Новые функции, добавленные в Python 2.7 Maintenance Releases
    • Благодарности
  • Что нового в Python 2.6
    • Python 3.0
    • Изменения в процессе разработки
    • PEP 343: Оператор with
    • PEP 366: явный относительный импорт из основного модуля
    • PEP 370: сайтов-пакетов для каждого пользователя Каталог
    • PEP 371: многопроцессорный пакет
    • PEP 3101: расширенное форматирование строк
    • PEP 3105: печать как функция
    • PEP 3110: изменения обработки исключений
    • PEP 3112: байтовые литералы
    • PEP 3116: новая библиотека ввода-вывода
    • PEP 3118: пересмотренный протокол буфера
    • PEP 3119: абстрактные базовые классы
    • PEP 3127: поддержка целочисленного литерала и синтаксис
    • PEP 3129: Декораторы классов
    • PEP 3141: Иерархия типов для чисел
    • Другие изменения языка
    • Новые и улучшенные модули
    • Устаревание и удаление
    • Изменения сборки и C API
    • Портирование на Python 2. 6
    • Благодарности
  • Что нового в Python 2.5
    • PEP 308: условные выражения
    • PEP 309: приложение частичной функции
    • PEP 314: метаданные для программных пакетов Python версии 1.1
    • PEP 328: Абсолютный и относительный импорт
    • PEP 338: выполнение модулей как скриптов
    • PEP 341: унифицированная попытка/кроме/наконец
    • PEP 342: новые функции генератора
    • PEP 343: Оператор with
    • PEP 352: исключения как классы нового стиля
    • PEP 353: использование ssize_t в качестве типа индекса
    • PEP 357: метод ‘__index__’
    • Другие изменения языка
    • Новые, улучшенные и удаленные модули
    • Изменения сборки и C API
    • Портирование на Python 2.5
    • Благодарности
  • Что нового в Python 2.4
    • PEP 218: встроенные объекты Set
    • PEP 237: объединение длинных целых и целых чисел
    • PEP 289: выражения генератора
    • PEP 292: более простые замены строк
    • PEP 318: декораторы для функций и методов
    • PEP 322: обратная итерация
    • PEP 324: новый модуль подпроцесса
    • PEP 327: десятичный тип данных
    • PEP 328: многострочный импорт
    • PEP 331: независимые от локали преобразования чисел с плавающей запятой в строку
    • Другие изменения языка
    • Новые, улучшенные и устаревшие модули
    • Изменения сборки и C API
    • Портирование на Python 2. 4
    • Благодарности
  • Что нового в Python 2.3
    • PEP 218: стандартный набор данных
    • PEP 255: простые генераторы
    • PEP 263: Кодировки исходного кода
    • PEP 273: Импорт модулей из ZIP-архивов
    • PEP 277: поддержка имени файла Unicode для Windows NT
    • PEP 278: универсальная поддержка новой строки
    • PEP 279: перечислить()
    • PEP 282: пакет ведения журнала
    • PEP 285: логический тип
    • PEP 293: обратные вызовы при обработке ошибок кодека
    • PEP 301: Индекс пакетов и метаданные для Distutils
    • PEP 302: новые крючки импорта
    • PEP 305: файлы, разделенные запятыми
    • PEP 307: улучшения рассола
    • Расширенные срезы
    • Другие изменения языка
    • Новые, улучшенные и устаревшие модули
    • Pymalloc: специализированный распределитель объектов
    • Изменения сборки и C API
    • Прочие изменения и исправления
    • Портирование на Python 2. 3
    • Благодарности
  • Что нового в Python 2.2
    • Введение
    • PEP 252 и 253: изменения типа и класса
    • PEP 234: Итераторы
    • PEP 255: простые генераторы
    • PEP 237: объединение длинных целых и целых чисел
    • PEP 238: Смена оператора подразделения
    • Изменения Юникода
    • PEP 227: вложенные области
    • Новые и улучшенные модули
    • Изменения и исправления интерпретатора
    • Прочие изменения и исправления
    • Благодарности
  • Что нового в Python 2.1
    • Введение
    • PEP 227: вложенные области
    • PEP 236: __будущее__ Директивы
    • PEP 207: расширенные сравнения
    • PEP 230: система предупреждений
    • PEP 229: Новая система сборки
    • PEP 205: слабые ссылки
    • PEP 232: функциональные атрибуты
    • PEP 235: Импорт модулей на платформах без учета регистра
    • PEP 217: интерактивный дисплейный хук
    • PEP 208: новая модель принуждения
    • PEP 241: метаданные в пакетах Python
    • Новые и улучшенные модули
    • Прочие изменения и исправления
    • Благодарности
  • Что нового в Python 2. 0
    • Введение
    • Что насчет Python 1.6?
    • Новый процесс разработки
    • Юникод
    • Понимание списка
    • Расширенное задание
    • Строковые методы
    • Сборка мусора циклов
    • Другие основные изменения
    • Портирование на 2.0
    • Расширение/внедрение изменений
    • Distutils: упрощение установки модулей
    • XML-модули
    • Замена модуля
    • Новые модули
    • Улучшения IDLE
    • Удаленные и устаревшие модули
    • Благодарности

«Журнал изменений» — это HTML-версия файла, созданного из содержимого Дерево каталогов Misc/NEWS.d, содержащее 90 719 всех 90 720 нетривиальных изменений. на Python для текущей версии.

  • Список изменений
    • Следующий Python
    • Финал Python 3.11.2
    • Финал Python 3.11.1
    • Python 3.11.0 финал
    • Python 3.11.0 кандидат версии 2
    • Кандидат на выпуск Python 3. 11.0 1
    • Python 3.11.0 бета 5
    • Python 3.11.0 бета 4
    • Python 3.11.0 бета 3
    • Python 3.11.0 бета 2
    • Python 3.11.0 бета 1
    • Python 3.11.0 альфа 7
    • Python 3.11.0 альфа 6
    • Python 3.11.0 альфа 5
    • Python 3.11.0 альфа 4
    • Python 3.11.0 альфа 3
    • Python 3.11.0 альфа 2
    • Python 3.11.0 альфа 1
    • Python 3.10.0 бета 1
    • Python 3.10.0 альфа 7
    • Python 3.10.0 альфа 6
    • Python 3.10.0 альфа 5
    • Python 3.10.0 альфа 4
    • Python 3.10.0 альфа 3
    • Python 3.10.0 альфа 2
    • Python 3.10.0 альфа 1
    • Python 3.9.0 бета 1
    • Python 3.9.0 альфа 6
    • Python 3.9.0 альфа 5
    • Python 3.9.0 альфа 4
    • Python 3.9.0 альфа 3
    • Python 3.9.0 альфа 2
    • Python 3.9.0 альфа 1
    • Python 3.8.0 бета 1
    • Python 3.8.0 альфа 4
    • Python 3.8.0 альфа 3
    • Python 3. 8.0 альфа 2
    • Python 3.8.0 альфа 1
    • Финал Python 3.7.0
    • Кандидат на выпуск Python 3.7.0 1
    • Python 3.7.0 бета 5
    • Python 3.7.0 бета 4
    • Python 3.7.0 бета 3
    • Python 3.7.0 бета 2
    • Python 3.7.0 бета 1
    • Python 3.7.0 альфа 4
    • Python 3.7.0 альфа 3
    • Python 3.7.0 альфа 2
    • Python 3.7.0 альфа 1
    • Финал Python 3.6.6
    • Кандидат на выпуск Python 3.6.6 1
    • Финал Python 3.6.5
    • Кандидат на выпуск Python 3.6.5 1
    • Финал Python 3.6.4
    • Кандидат на выпуск Python 3.6.4 1
    • Финал Python 3.6.3
    • Кандидат на выпуск Python 3.6.3 1
    • Финал Python 3.6.2
    • Python 3.6.2 кандидат версии 2
    • Кандидат на выпуск Python 3.6.2 1
    • Финал Python 3.6.1
    • Кандидат на выпуск Python 3.6.1 1
    • Финал Python 3.6.0
    • Python 3.6.0 кандидат версии 2
    • Кандидат на выпуск Python 3. 6.0 1
    • Python 3.6.0 бета 4
    • Python 3.6.0 бета 3
    • Python 3.6.0 бета 2
    • Python 3.6.0 бета 1
    • Python 3.6.0 альфа 4
    • Python 3.6.0 альфа 3
    • Python 3.6.0 альфа 2
    • Python 3.6.0 альфа 1
    • Python 3.5.5 финальная версия
    • Кандидат на выпуск Python 3.5.5 1
    • Финал Python 3.5.4
    • Кандидат на выпуск Python 3.5.4 1
    • Финал Python 3.5.3
    • Кандидат на выпуск Python 3.5.3 1
    • Финал Python 3.5.2
    • Кандидат на выпуск Python 3.5.2 1
    • Финал Python 3.5.1
    • Кандидат на выпуск Python 3.5.1 1
    • Финал Python 3.5.0
    • Кандидат на выпуск Python 3.5.0 4
    • Кандидат на выпуск Python 3.5.0 3
    • Кандидат на выпуск Python 3.5.0 2
    • Кандидат на выпуск Python 3.5.0 1
    • Python 3.5.0 бета 4
    • Python 3.5.0 бета 3
    • Python 3.5.0 бета 2
    • Python 3.5.0 бета 1
    • Python 3. 5.0 альфа 4
    • Python 3.5.0 альфа 3
    • Python 3.5.0 альфа 2
    • Python 3.5.0 альфа 1

Лучшие новые функции и исправления в Python 3.11

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

старший писатель, Информационный мир |

Thinkstock Содержание
  • Повышение скорости
  • Расширенная информация об ошибке
  • Улучшения исключений
  • Улучшения набора текста
  • Поддержка TOML только для чтения в stdlib
  • Атомарная группировка и ускорение для регулярных выражений
  • Удаление «разряженных батарей» из стандартной библиотеки
  • Другие дополнения, исправления и изменения Python 3. 11

Показать больше

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

Версия Python 3.11 только что была выпущена, и разработчикам рекомендуется опробовать эту последнюю версию на непроизводственном коде, чтобы убедиться, что она работает с вашими программами, и понять, выиграет ли ваш код от повышения производительности.

Вот краткое изложение наиболее значимых новых функций Python 3.11 и того, что они значат для разработчиков Python.

Повышение скорости

В Python 3.11 реализовано множество отдельных улучшений производительности, но самым большим нововведением является специализированный адаптивный интерпретатор. Поскольку тип объекта меняется редко, теперь интерпретатор пытается проанализировать работающий код и заменить общие байт-коды специфическими для типа. Например, бинарные операции (сложение, вычитание и т. д.) можно заменить специализированными версиями для целых чисел, чисел с плавающей запятой и строк.

Вызовы функций Python также требуют меньше накладных расходов в Python 3.11. Фреймы стека для вызовов функций теперь используют меньше памяти и спроектированы более эффективно. Кроме того, хотя рекурсивные вызовы не оптимизированы по хвосту (что, вероятно, невозможно в Python, в любом случае), они более эффективны, чем в предыдущих версиях. Сам интерпретатор Python также запускается быстрее, а основные модули, необходимые для среды выполнения Python, хранятся и загружаются более эффективно.

Согласно официальному набору тестов Python, Python 3.11 работает примерно в 1,25 раза быстрее, чем Python 3.10. Обратите внимание, что это ускорение составляет агрегат мера. Некоторые вещи работают намного быстрее, но многие другие работают лишь немного быстрее или примерно так же. Тем не менее, лучшая часть этих улучшений заключается в том, что они предоставляются бесплатно. Вам не нужно вносить какие-либо изменения в код программ на Python, чтобы воспользоваться преимуществами ускорения Python 3.11.

Расширенная информация об ошибках

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

Рассмотрим следующий код, который выдает ошибку:

 x = [1,2,3]
г = х [1] [0]
 

В Python 3.10 мы получим следующее сообщение об ошибке, которое не очень полезно:

 Файл "C:\Python311\code.py", строка 2, в 
    г = х [1] [0]
TypeError: объект 'int' не подлежит подписке
 

Вместо того, чтобы оставлять нас в недоумении, какой int не поддерживает сценарий, трассировка ошибки в Python 3. 11 указывает на точную часть строки, которая генерирует ошибку: 9TypeError: объект ‘int’ не подлежит подписке

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

Улучшения исключений

Исключения, механизм обработки ошибок Python, получили много новых функций в Python 3.11:

  • Несколько исключений могут быть вызваны и обработаны одновременно с новым синтаксисом , кроме* и новым исключением ExceptionGroup тип. Это позволяет элегантно обрабатывать проблемы, когда несколько ошибок могут возникать вместе, например, при работе с асинхронными или параллельными методами или при работе с несколькими сбоями при повторной попытке операции.
  • Исключения «Нулевая стоимость»: Исключения теперь не имеют стоимости для программы, если они фактически не вызваны. Это означает, что путь по умолчанию для блока try/except быстрее и использует меньше памяти.
  • Время, необходимое для перехвата исключения, уменьшено примерно на 10%.
  • Исключения могут быть дополнены контекстными примечаниями, отдельными от текста самого исключения.

Улучшения типизации

Функции подсказок типов в Python упрощают управление и анализ больших кодовых баз, и с каждой версией, начиная с Python 3.5, они значительно расширялись. В Python 3.11 появилось несколько новых дополнений, связанных с подсказками типов.

Тип Self

Методы класса, которые возвращают self  ранее требовали тупых и подробных аннотаций, чтобы быть полезными. typing.Self позволяет аннотировать возвращаемое значение метода класса просто как Self . Вы получаете полезные и предсказуемые результаты от своих инструментов анализа для таких методов.

Тип произвольного строкового литерала

Ранее в аннотациях типов не было способа указать, что данная переменная должна быть строковым литералом, то есть строкой, определенной в исходном коде. Новая аннотация typing.LiteralString исправляет это. Используя новую аннотацию, линтеры могут проверять, является ли переменная строкой, определенной в исходном коде, или новой строкой, состоящей из 9 символов.0719 только исходных строк.

Преобразование классов данных

Начиная с Python 3.7, классы данных упростили определение классов, которые следуют общим шаблонам для создания свойств на основе их параметров инициализации. Но не существовало стандартного механизма, позволяющего вещам, которые вели себя как классы данных (но сами не были классами данных), использовать аннотации типов для объявления своего поведения. Преобразования класса данных добавляют typing.dataclass_transform , чтобы указать, как данная функция, класс или метакласс ведет себя как класс данных.

Variadic generics

Первоначальное предложение для подсказок типов включало TypeVar , способ указать универсальную функцию с использованием одного параметризованного типа — например, тип T , который может быть int или float . В Python 3.11 добавлен TypeVarTuple, или «вариативные дженерики», которые можно использовать для указания заполнителя не только для одного типа, но и для их серии, выраженной в виде кортежа. Это было бы особенно полезно в таких библиотеках, как NumPy, где вы могли бы выполнять заблаговременные проверки на наличие ошибок, например, правильности формы предоставленный массив.

Поддержка TOML только для чтения в stdlib

Python использует TOML или Tom’s Obvious Minimal Language в качестве формата конфигурации (как в pyproject.toml), но не предоставляет возможности чтения файлов формата TOML в качестве стандартной библиотеки модуль. Python 3.11 добавляет tomllib для решения этой проблемы. Обратите внимание, что tomllib не создает или записывает файлы TOML; для этого вам понадобится сторонний модуль, например Tomli-W или TOML Kit.

Атомарная группировка и ускорение для регулярного выражения

В модуле Python re , предназначенном для работы с регулярными выражениями, отсутствуют некоторые функции, имеющиеся в других реализациях регулярных выражений. Одним из них является атомарная группировка, широко поддерживаемая в других языках. Python 3.11 теперь поддерживает этот шаблон, используя общий синтаксис для атомарных группировок (например, (?>...) ).

Механизм сопоставления с образцом модуля re также был несколько переписан и работает примерно на 10% быстрее.

Удаление «разряженных батарей» из стандартной библиотеки

PEP 594 предпринял попытку удалить многие так называемые разряженные батареи или устаревшие или необслуживаемые модули из стандартной библиотеки Python. Начиная с Python 3.11, эти библиотеки помечены как устаревшие, но еще не удалены; они будут полностью удалены в Python 3.13.

Другие дополнения, исправления и изменения Python 3.11

В Python 3.11 также добавлено множество небольших улучшений:

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