Огромное улучшение производительности — важное улучшение Python 3.11. Кроме того, в Python 3.11 добавлено множество новых функций. В этой статье я представлю новые возможности Python 3.11 и продемонстрирую на примере кода, как эти функции могут повысить производительность и оптимизировать ваш код.
01 Сопоставление с образцом
В Python 3.11 появилось сопоставление с образцом, которое может упростить сложную условную логику. Вот пример использования сопоставления с образцом для работы с различными типами структур данных:
def process_data(data): match data: case 0: print("Received zero") case [x, y]: print(f"Received a list: {x}, {y}") case {"name": name, "age": age}: print(f"Received a dictionary: {name}, {age}") case _: print("Received something else") process_data(0) # Output: Received zero process_data([1, 2]) # Output: Received a list: 1, 2 process_data({"name": "John", "age": 25}) # Output: Received a dictionary: John, 25 process_data("Hello") # Output: Received something else
В Python нет выражения переключателя, сопоставление с образцом можно просто рассматривать как расширенную версию переключателя.
02 Соответствие структурному образцу
На основе сопоставления с образцом структурное сопоставление с образцом может сопоставлять шаблоны со всей структурой данных.
def process_nested_data(data): match data: case {"name": str, "age": int, "scores": [int, ...]}: print("Valid data structure") # Process the data further case _: print("Invalid data structure") data = {"name": "John", "age": 25, "scores": [80, 90, 95]} process_nested_data(data) # Output: Valid data structure data = {"name": "Jane", "age": "twenty", "scores": [70, 85, 90]} process_nested_data(data) # Output: Invalid data structure
03 Типовые подсказки и проверки
В Python 3.11 улучшены подсказки типов и проверка типов. Вот пример использования улучшенных подсказок типов в функции:
def add_numbers(a: int, b: int) -> int: return a + b result = add_numbers(5, 10) print(result) # Output: 15 result = add_numbers("Hello", "World") # Type check error
04 Оптимизация производительности
В PEP 659 были представлены оптимизации структурного сопоставления шаблонов, что привело к более быстрому выполнению кода. Использование этой функции может повысить производительность вашего кода. пример:
# PEP 659 optimized code snippet for i in range(1, 100): match i: case 5: print("Found 5!") case _: pass
05 Улучшение отчетности об ошибках
В Python 3.11 улучшены отчеты об ошибках, что упрощает понимание и отладку проблем.
a = 10 b = "five" result = a + b # Type mismatch error
06 Новая стандартная библиотека
В версии 3.11 в Python добавлено несколько новых стандартных библиотек, например следующий модуль zoneinfo:
from zoneinfo import ZoneInfo from datetime import datetime now = datetime.now(tz=ZoneInfo("Europe/London")) print(now) # Output: 2023-07-11 16:25:00+01:00
07 Оператор итерации
В Python 3.11 представлен новый оператор «итерации», который упрощает перебор структур данных.
my_list = [1, 2, 3] iterate my_list: print(item) # Output: # 1 # 2 # 3
08 Оператор слияния словаря
В Python 3.11 появился | оператор объединения словарей. Этот краткий синтаксис упрощает операции слияния словарей. Вот пример:
dict1 = {"a": 1, "b": 2} dict2 = {"c": 3, "d": 4} merged_dict = dict1 | dict2 print(merged_dict) # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
09 Новая функция точки останова отладки
В Python 3.11 появилась встроенная функция точки останова, которая обеспечивает стандартный и удобный способ установки точек останова в коде для отладки. Он заменяет традиционный метод pdb.set_trace(). Просто вызовите функцию Breakpoint() в своем коде, и в этот момент будет активирована точка останова отладчика. Вот пример:
def calculate_sum(a, b): result = a + b breakpoint() # Debugger breakpoint return result x = 5 y = 10 z = calculate_sum(x, y) print(z)
Когда вызывается функция Breakpoint(), вызывается отладчик Python, после чего можно проверять переменные, пошагово выполнять код и анализировать состояние программы в этой конкретной точке. Эта новая функция отладки расширяет возможности разработки и упрощает процесс поиска и устранения проблем в коде.
Примечание. Чтобы использовать точку останова, вам необходимо убедиться, что ваша среда поддерживает отладчик, например встроенный в Python отладчик pdb, или совместимый отладчик, например pdb++, ipdb, или отладчик, интегрированный в IDE.
Благодаря функции «точки останова» Python 3.11 предоставляет более удобный и стандартизированный способ установки точек останова и кода отладки, что делает процесс отладки более эффективным и рациональным.
10 Синхронная итерация
Python 3.11 может использовать оператор match для выполнения синхронной итерации и сопоставления с образцом. Это позволяет извлекать и обрабатывать элементы из нескольких итерируемых объектов в краткой и читаемой форме.
fruits = ["apple", "banana", "cherry"] counts = [3, 6, 4] for fruit, count in zip(fruits, counts): match fruit, count: case "apple", 3: print("Three apples") case "banana", 6: print("Six bananas") case "cherry", 4: print("Four cherries") case _: print("Unknown fruit") # Output: # Three apples # Six bananas # Four cherries
В приведенном выше примере кода оператор match используется для одновременного перебора списков фруктов и количества. Шаблон соответствует каждой паре соответствующих элементов, и если ни один из случаев не соответствует, будет выполнен код подстановочного знака _.
Краткое содержание
Python 3.11 содержит множество новых возможностей и функций, которые позволяют писать более эффективный и надежный код, используя преимущества новых функций, таких как сопоставление шаблонов, подсказки типов, улучшенные отчеты об ошибках и многое другое. Из-за огромного улучшения производительности, которое принес Python 3.11, в будущем (поскольку все пакеты не были полностью перенесены на 3.11) Python 3.11 определенно станет основной версией, поэтому мы знакомы с этими новыми функциями и можем написать больше в Будущий Эффективный код.