موارد جدید در پایتون ۳.۱۰ چیست؟

شکل ۱. پایتون ۳.۱۰
شکل ۱. پایتون ۳.۱۰
منتشر‌شده در: towardsdatascienceبه تاریخ ۹ ژوئن ۲۰۲۱
لینک منبع What’s New in Python 3.10?

توسعه پایتون ۳.۱۰ تثبیت شده‌است و ما در نهایت می‌توانیم تمامی ویژگی‌های جدیدی که در نسخه نهایی گنجانده خواهند شد را آزمایش کنیم.

ما برخی از جالب‌ترین موارد اضافه‌شده به تطبیق الگوی پایتون-ساختاری، مدیران زمینه پرانتزی، تایپ بیشتر، و پیام‌های خطای جدید و بهبود یافته را پوشش خواهیم داد.

تطبیق الگوی ساختاری

تطبیق الگوی ساختاری یک ویژگی باور نکردنی برای اضافه شدن به پایتون است -واقعا عالی است.

یک عبارت if-else را تصور کنید که به این شکل است:

If-else logic in Python 3.9

شما آن را در نظر می‌گیرید و نحو را تغییر می‌دهید بنابراین بیشتر شبیه به این است:

شکل ۲. منطق حالت تطابق در پایتون ۳.۱۰
شکل ۲. منطق حالت تطابق در پایتون ۳.۱۰

این یک عبارت جدید match-case است -خوب است، اما چیز خاصی نیست -

چیزی که بیانیه match-case را بسیار جالب می‌کند چیزی است که تطبیق الگوی ساختاری نامیده می‌شود.

تطبیق الگوی ساختاری به ما این امکان را می‌دهد تا منطق match-case مشابه را اجرا کنیم، اما براساس اینکه آیا ساختار هدف مقایسه‌ای ما با یک الگوی معین مطابقت دارد یا خیر.

پس بیایید دو فرهنگ لغت را تعریف کنیم، که هر دو ساختار متفاوتی دارند.

شکل ۳. ما dict_a و dict_b را تعریف می‌کنیم - هر دو دارای اطلاعات مشابه هستند، اما در ساختارهای مختلف فرهنگ لغت
شکل ۳. ما dict_a و dict_b را تعریف می‌کنیم - هر دو دارای اطلاعات مشابه هستند، اما در ساختارهای مختلف فرهنگ لغت

اکنون ، می توانیم الگویی برای مطابقت با dict_a بنویسیم:

شکل ۴. طرح فرمان dict_a
شکل ۴. طرح فرمان dict_a

و الگویی که با dict_b نیز مطابقت داشته باشد:

شکل ۵. طرح فرمان dict_b
شکل ۵. طرح فرمان dict_b

اگر هر دوی اینها را در یک عبارت match-case کنار هم بگذاریم، در کنار آنچه که else / همه با case _-به دست می‌آوریم:

شکل ۶. ما هم از طریق dict_a و هم با dict_b حلقه می‌زنیم - هر دو با تطبیق الگوی ساختاری مطابقت دارند
شکل ۶. ما هم از طریق dict_a و هم با dict_b حلقه می‌زنیم - هر دو با تطبیق الگوی ساختاری مطابقت دارند

خیلی باحاله درسته؟

مدیران زمینه پرانتزی

یک تغییر کوچک‌تر که از یک تغییر بسیار بزرگ‌تر ناشی می‌شود که با پایتون ۳.۹ ظاهر شد-یک تجزیه‌گر جدید مبتنی بر PEG.

این تجزیه‌گر پایتون پیشین دارای محدودیت‌های بسیاری بود، که باعث محدود شدن افواج پایتون می‌شد که در آن نحو را مجاز می‌دانستند.

تجزیه‌گر مبتنی بر PEG پایتون ۳.۹ این موانع را حذف کرد، که بلند مدت می‌تواند به نحو بهتری منجر شود-اولین مثال ما از این تغییر، مدیران زمینه پرانتزی جدید است.

پیش از پایتون ۳.۹، ما می‌توانیم چیزی شبیه این بنویسیم تا دو جریان I / O (یا بیشتر) را باز کنیم:

قبل از این تجزیه‌گر جدید، تنها در صورتی می‌توانستیم دو مدیر زمینه را انتخاب کنیم که هر دوی آن‌ها در یک خط باشند.

در حقیقت، خط اول خیلی طولانی است. اما به دلیل محدودیت‌های تجزیه کننده، تنها راهی که می‌توانیم این خط را در چندین خط تقسیم کنیم، استفاده از کاراکتر \ خط ادامه بود:

شکل ۷. همچنین، می توانیم از کاراکتر ادامه خط استفاده کنیم \
شکل ۷. همچنین، می توانیم از کاراکتر ادامه خط استفاده کنیم \

این کار جواب می‌دهد، اما Pythonic نیست. با این تجزیه‌گر جدید، اکنون می‌توانیم این خط را در چند خط با استفاده از پرانتزهایی مانند این تقسیم کنیم:

شکل ۸. با این تجزیه‌گر جدید، و با پشتیبانی رسمی از پایتون ۳.۱۰-اکنون می‌توانیم مدیران زمینه خود را به صورت پرانتز در آوریم.
شکل ۸. با این تجزیه‌گر جدید، و با پشتیبانی رسمی از پایتون ۳.۱۰-اکنون می‌توانیم مدیران زمینه خود را به صورت پرانتز در آوریم.

که pythonic است.

حالا، قبل از این که حرکت کنیم-یک چیز عجیب و غریب جزئی در این ویژگی جدید وجود دارد. کاملا نو نیست …

اگر بنویسیم:

شکل ۹. با وجود این که تا پایتون ۳.۱۰ «معرفی» نشده بود، CPyton تغییر ترکیب جدید را به لطف تجزیه‌گرPEG پذیرفت-بنابراین ما یک ویژگی جدید داریم که کاملا با ۳.۹ سازگار بود.
شکل ۹. با وجود این که تا پایتون ۳.۱۰ «معرفی» نشده بود، CPyton تغییر ترکیب جدید را به لطف تجزیه‌گرPEG پذیرفت-بنابراین ما یک ویژگی جدید داریم که کاملا با ۳.۹ سازگار بود.

در پایتون ۳.۹-کار می‌کند. به این دلیل که تجزیه‌گر جدید این نحو را فعال کرد، با وجود اینکه رسما تا پایتون ۳.۱۰ پشتیبانی نمی‌شد.

تایپ بیشتر

به‌روزرسانی های بیشتری نیز برای ویژگی‌های تایپ پایتون وجود دارد، که اگر علاقه‌مند باشید، من در اینجا با جزئیات بیشتر در مورد آن‌ها نوشته‌ام.

به راحتی جالب‌ترین مورد در اینجا گنجاندن یک اپراتور جدید است که برای انواع مانند یک منطق OR رفتار می‌کند، چیزی که قبلاً از روش Union برای آن استفاده می‌کردیم:

روش اتحادیه برای انواع در ۳.۹

اکنون، نیازی به نوشتن from typing import Union نداریم ، و Union[int, float] به int | float ساده شده است - که بسیار تمیزتر به نظر می رسد:

شکل ۱۰. اپراتور واحد برای انواع در ۳.۱۰
شکل ۱۰. اپراتور واحد برای انواع در ۳.۱۰

پیغام‌های خطای بهتر

به من بگویید که اولین باری که این را دیدید مستقیم به سمت Google نرفتید:

SyntaxError: unexpected EOF while parsing

نتیجه شماره یک در Googleهنگام ورود به SyntaxErrorحاکی از آن است که مطمئناً بسیاری از ما در مقطعی این کار را انجام داده‌ایم.

شکل ۱۱. EOF غیرمنتظره در هنگام تجزیه-یک روش ساده و ظریف برای گفتن اینکه ما یک پرانتز را از دست دادیم
شکل ۱۱. EOF غیرمنتظره در هنگام تجزیه-یک روش ساده و ظریف برای گفتن اینکه ما یک پرانتز را از دست دادیم

این یک پیام خطای واضح نیست، و پایتون پر از پیام‌های خطای کم‌تر از ایده‌آل است. خوشبختانه، کسی متوجه شد-و بسیاری از این پیام‌ها به طور قابل‌توجهی بهبود یافتند.

پرانتز گم‌شده با ۳.۹ (چپ) و ۳.۱۰ (راست) زنجیره باز شده با ۳.۹ و ۳.۱۰ عملگر تخصیص به جای عملگر مقایسه مورد استفاده با ۳.۹ و ۳.۱۰

چند تغییر دیگر نیز وجود دارد که در لیست تغییرات رسمی ذکر شده‌اند-اما به نظر نمی‌رسد در طول آزمایش نشان داده شوند، از جمله:

from collections import namedtoplo> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?

در اینجا AttributeError مانند قبل است اما با یک نام مشخصه پیشنهادی اضافه‌شده - namedtoplo به عنوان نمونه بالقوه از مشخصه namedtuple شناخته می‌شود.

به همین ترتیب، ما بهبود مشابهی را برای پیام‌های NameError می‌بینیم:

new_var = 5
print(new_vr)> NameError: name 'new_vr' is not defined. Did you mean: new_var?

به‌روزرسانی های دیگری نیز برای خطا دادن پیغام‌ها وجود دارد! .

بنابراین، آن‌ها برخی از ویژگی‌های کلیدی جدید هستند که با پایتون ۳.۱۰ معرفی شده‌اند!

انتظار می‌رود که انتشار کامل آن در چهارم اکتبر ۲۰۲۱ انجام شود، از الآن تا آن زمان، دسته‌های پایتون بر روی بهبود آنچه که قبلا اضافه شده‌است کار خواهند کرد -اما هیچ ویژگی جدیدی معرفی نخواهد شد.اگر می خواهید خودتان آن را بررسی کنید ، 3.10.0b1 را می توانید از اینجا دانلود کنید.

امیدوارم از این مقاله لذت برده باشید!

با تشکر برای خواندن.

این متن با استفاده از ربات ترجمه مقالات دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.