Python 3.10

پایتون 3.10 در October سال 2021 عرضه شد و تا ماه May سال 2023 پشتیبانی رفع باگ داشت و تا October سال 2026 پچ های امنیتی را دریافت می کند.

Pattern matching – PEP 634-635-636

یکی از حاشیه ساز ترین ویژگی جدید پایتون یک ویژگی از 3 PEP بود از 634 تا 636 ! این ساختار جدید اجازه ی استفاده از ساختار switch را به برنامه نویسان میداد. ساختار switch بین دیگر زبان های برنامه نویسی ساختار رایج و نسبتا پرکاربردی بود:

match code:
    case 1:
        print("Working as expected")
    case -1 | -2 | -3:
        print("Internal Error")
    case _:
        print("Unknown code")


نکته:

در این ساختار برای قرار دادن چند حالت برای بازگرداندن یک رفتار از عملگر | استفاده می کنیم.


بر خلاف دیگر زبان های برنامه نویسی پایتون switch را به پیشرفته ترین حد ممکن رسانده و میتوانیم از لیست ها و دیکشنری ها نیز درون case ها استفاده کنیم. این پیشرفتگی به لطف pattern matching المان match رخ داده است که حتی در ورودی case ها به type و length ورودی نیز دسترسی داریم. البته استفاده از اعداد و رشته ها برای کارهایی عمومی و استفاده از دیکشنری ها برای بازگرداندن خطاها به کاربر پایتونیک تر است:

match x:
    case {"warning": value}:
        print("warning passed with value:", value)
    case ["error", value]:
        print("Error array passed with value:", value)

ترکیب این پیچیدگی میتواند حتی به پیادی سازی ساده تر ایجاد Object ها بر اساس Class ها نیز منجر شود:

match json_pet:
    case {"type": "cat", "name": name, "pattern": pattern}:
        return Cat(name, pattern)
    case {"type": "dog", "name": name, "breed": breed}:
        return Dog(name, breed)
    case _:
        raise ValueError("Not a suitable pet")

این ویژگی برای شما جالب نیست باید بدانید که توسعه دهندگان دیگر زبان های برنامه نویسی آرزوی داشتن همچین switch ای را در زبان خود دارند؛ پس شکرگزار باشید و برای مطالعه ی بیشتر به لینک زیر بروید!

https://peps.python.org/pep-0636/

Parenthesized context managers

احتمالا در قسمت قبل(Python 3.9) به اهمیت PEG parser فکر نکرده بودید! وجود PEG parser جدید به توسعه دهندگان هسته ی پایتون اجازه داد تا از پرانتزها در context manager ها استفاده کنند. این کار فرمت خوانا تری به کدهای پایتون داد که بسیار چشم نواز و لذت بخش است.

قبلا

with CtxManager1(
    ) as ctxm1, CtxManager2(
    ) as ctxm2, CtxManager3(
    ) as ctxm3
):

الآن:

with (
    CtxManager1() as ctxm1,
    CtxManager2() as ctxm2,
    CtxManager3() as ctxm3,
):

Better error messages

باز پایتون 3.10 با PEG parser درخشید: interpreter حالا بهتر کد نوشته شده را درک میکند و در صورت وقوع خطا پیغام مناسب تری را نمایش می دهد. به کد زیر دقت کنید:

dic = {"key": "value", "key2": ["value"]
def func(): pass

براکت دیکشنری بسته نشده است و قبل از پایتون 3.10 داشتیم:

حالا داریم:

میبینید چقدر پیغام خطا بهتر و دقیق تر شده است؟

Type union operator (|) – PEP 604

محبوبیت ماژول typing باعث شد تا علاوه بر ساختار هایی که در پایتون 3.9 به صورت عمومی در هسته ی پایتون در دسترس قرار گرفت، عملگر اجتماع یا typing.Union نیز با اپراتور | در دسترس قرار بگیرد. مثلا قبلا باید می نوشتیم:

def parse_number(text: str, pattern: typing.Union[str,re.Pattern]) -> typing.Union[int, float]

و حالا میتوانیم بنویسیم:

def parse_number(text: str, pattern: str | re.Pattern) ->int |float

Statistics – covariance, correlation, and linear_regression

در این نسخه از پایتون کتابخانه ی استاندارد عملیات آماری statistics به کتابخانه های استاندارد اضافه شد که عملیاتی مثل covariance، correlation و linear regression (رگرسیون خطی) و ... را انجام میداد.

>>> x = range(9)
>>> y = [*range(3)] * 3
>>> import statistics
>>> statistics.covariance(x, y)
0.75
>>> statistics.correlation(x, y)
0.31622776601683794
>>> statistics.linear_regression(x, y)
LinearRegression(slope=0.1, intercept=0.6)