یک مفسر سریعتر، خطاهای قابل فهمتر، نکات تایپ قویتر، و تعداد زیادی افزایش سرعت و ترفند دیگر اکنون آماده آزمایش هستند.
- بهبود سرعت
- اطلاعات خطای پیشرفته
- بهبودهای استثنا
- بهبودهای تایپ
- پشتیبانی TOML فقط خواندنی در stdlib
- گروهبندی اتمی و افزایش سرعت برای regex
- حذف «باتریهای مرده» از کتابخانه استاندارد
- اضافات، اصلاحات و تغییرات دیگر Python 3.11
زبان برنامه نویسی پایتون سالانه نسخههای جدیدی را منتشر میکند، با نسخه بتای قفلشده در نیمه اول سال و انتشار نهایی در پایان سال.
Python 3.11 به تازگی منتشر شده است، و توسعه دهندگان تشویق می شوند امتحان کنند این آخرین نسخه را در مورد کدهای غیر تولیدی منتشر کنید، هم برای تأیید اینکه با برنامه های شما کار می کند و هم برای دریافت ایده ای از اینکه آیا کد شما از بهبود عملکرد آن سود می برد یا خیر.
در اینجا خلاصه ای از مهم ترین ویژگی های جدید در Python 3.11 و معنای آنها برای توسعه دهندگان Python آمده است.
بهبود سرعت
بسیاری از پیشرفتهای عملکرد فردی در Python 3.11 ایجاد شد، اما بزرگترین اضافه شده مفسر تطبیقی تخصصی. از آنجایی که نوع یک شی به ندرت تغییر می کند، مفسر اکنون سعی می کند کدهای در حال اجرا را تجزیه و تحلیل کند و بایت کدهای عمومی را با کدهای نوع خاص جایگزین کند. به عنوان مثال، عملیات باینری (افزودن، تفریق، و غیره) را می توان با نسخه های تخصصی برای اعداد صحیح، شناورها و رشته ها جایگزین کرد.
فراخوانی تابع پایتون نیز به سربار کمتری در پایتون ۳.۱۱ نیاز دارد. اکنون فریمهای پشتهای برای فراخوانی عملکرد از حافظه کمتری استفاده میکنند و کارآمدتر طراحی میشوند. همچنین، در حالی که تماسهای بازگشتی بهصورت دنبالهدار بهینهسازی نشدهاند (که احتمالاً به هر حال در پایتون امکانپذیر نیست)، نسبت به نسخههای قبلی کارآمدتر هستند. خود مفسر پایتون نیز سریعتر شروع میشود و ماژولهای اصلی مورد نیاز برای زمان اجرا پایتون با کارایی بیشتری ذخیره و بارگذاری میشوند.
طبق مجموعه معیار رسمی پایتون، پایتون ۳.۱۱ حدود ۱.۲۵ برابر سریعتر از پایتون ۳.۱۰ اجرا می شود. توجه داشته باشید که این افزایش سرعت یک معیار جمع است. برخی از چیزها بسیار سریعتر اجرا می شوند، اما بسیاری دیگر فقط کمی سریعتر یا تقریباً یکسان هستند. با این حال، بهترین بخش در مورد این پیشرفت ها این است که آنها به صورت رایگان ارائه می شوند. برای بهره مندی از سرعت بالای پایتون ۳.۱۱، نیازی به تغییر کد برای برنامه های پایتون ندارید.
اطلاعات خطای پیشرفته
یکی دیگر از ویژگی های فورا مفید در پایتون ۳.۱۱ پیام های خطای دقیق تر است. پایتون ۳.۱۰ قبلاً به لطف تجزیه کننده جدید مورد استفاده در مفسر، گزارش خطای بهتر داشت. اکنون، Python 3.11 با ارائه بازخورد دقیق در مورد اینکه کدام بخش خاص از یک عبارت معین باعث خطا شده است، آن را گسترش میدهد.
کد زیر را در نظر بگیرید که یک خطا ایجاد می کند:
x = [1,2,3] z = x[1][0]
در پایتون ۳.۱۰، پیام خطای زیر را دریافت میکنیم که خیلی مفید نیست:
File "C:\Python311\code.py", line 2, in <module> z = x[1][0] TypeError: 'int' object is not subscriptable
بهجای اینکه فکر کنیم کدام int
قابل ثبت نیست، ردیابی خطا در Python 3.11 به قسمت دقیق خطی که خطا را ایجاد میکند اشاره میکند:
File "C:\Python311\code.py", line 2, in <module> z = x[1][0] ~~~~^^^ TypeError: 'int' object is not subscriptable
اکنون هیچ ابهامی در مورد اینکه مشکل کجاست وجود ندارد.
بهبودهای استثنا
استثناها، مکانیسم رسیدگی به خطای پایتون، بسیاری از ویژگیهای جدید را در پایتون ۳.۱۱ دریافت کردهاند:
- چندین استثنا را میتوان بهطور همزمان مطرح و مدیریت کرد با
بهجز* جدید نحو
و نوع استثنایExceptionGroup
جدید. این اجازه میدهد تا مسائلی را که در آن چندین خطا با هم مطرح میشوند، مدیریت کنید، مانند هنگام برخورد با روشهای ناهمزمان یا همزمان یا هنگام برخورد با چندین خرابی هنگام امتحان مجدد یک عملیات. - استثناهای “هزینه صفر”: استثناها اکنون هیچ هزینه ای برای برنامه ندارند مگر اینکه آنها در واقع بزرگ شده اند. این بدان معناست که مسیر پیشفرض بلوک
try/except
سریعتر است و از حافظه کمتری استفاده میکند. - زمان لازم برای گرفتن یک استثنا حدود ۱۰٪ کاهش یافته است.< /li>
- استثناها را میتوان با یادداشتهای متنی غنیسازی کرد، جدا از متن خود استثنا.< /li>
بهبودهای تایپ
ویژگیهای اشاره به نوع پایتون، مدیریت و تجزیه و تحلیل پایگاههای کد بزرگتر را آسانتر میکند و از زمان پایتون ۳.۵ با هر بازبینی بهطور قابلتوجهی افزایش یافته است. Python 3.11 چندین اضافات جدید برای اشاره به نوع اضافه می کند.
نوع خود
روشهای کلاسی که خود را برمیگرداند
قبلاً برای مفید بودن به حاشیهنویسی مبهم و پرمخاطب نیاز داشتند. typing.Self به شما امکان می دهد مقدار بازگشتی یک متد کلاس را به سادگی به صورت حاشیه نویسی کنید. خود
. شما نتایج مفید و قابل پیش بینی را از ابزارهای تجزیه و تحلیل خود برای چنین روش هایی دریافت می کنید.
نوع تحت اللفظی رشته دلخواه
پیش از این، حاشیهنویسیهای نوع هیچ راهی برای نشان دادن یک متغیر معین که نیاز به یک رشته واقعی بود نداشتند – یعنی رشتهای که در کد منبع تعریف شده بود. حاشیه نویسی typing.LiteralString جدید این مشکل را برطرف می کند. با استفاده از حاشیه نویسی جدید، لینترها می توانند متغیری را آزمایش کنند که یک رشته تعریف شده در منبع یا یک رشته جدید متشکل از فقط رشته های تعریف شده از منبع است.
تغییر کلاس داده
از پایتون ۳.۷، کلاسهای داده تعریف کلاسهایی را آسانتر کردهاند که از الگوهای رایج برای ایجاد ویژگیها بر اساس پارامترهای اولیهسازی خود پیروی میکنند. اما هیچ مکانیسم استانداردی برای اجازه دادن به چیزهایی که رفتار مانند کلاسهای داده داشتند (اما خود کلاسهای داده نبودند) وجود نداشت تا از یادداشتهای نوع برای اعلام رفتار خود استفاده کنند. Dataclass transforms تزئین کننده typing.dataclass_transform
را اضافه می کند تا نشان دهد چگونه یک داده مشخص تابع، کلاس یا متاکلاس مانند یک کلاس داده عمل می کند.
ژنریک متغیر
پیشنهاد اولیه برای نکات نوع شامل TypeVar
، یک روشی برای تعیین یک تابع عمومی با استفاده از یک نوع پارامتری منفرد – به عنوان مثال، یک نوع T
که می تواند یک int
یا یک float
باشد. Python 3.11 TypeVarTuple یا “variadic generics” را اضافه می کند، که می توانید از آنها برای تعیین مکان نگهدار استفاده کنید. نه فقط یک نوع بلکه یک سری از آنها که به صورت تاپلی بیان می شود. این امر به ویژه در کتابخانههایی مانند NumPy مفید خواهد بود، جایی که میتوانید پیش از موعد برای خطاهایی مانند اینکه آیا آرایه ارائهشده شکل درستی دارد یا خیر، بررسی کنید.
پشتیبانی TOML فقط خواندنی در stdlib
Python از TOML یا زبان حداقلی آشکار تام به عنوان قالب پیکربندی استفاده میکند (مانند pyproject.toml)، اما توانایی خواندن فایلهای با فرمت TOML را به عنوان یک ماژول کتابخانه استاندارد نشان نمیدهد. Python 3.11 tomllib را برای رفع این مشکل اضافه می کند. توجه داشته باشید که tomllib
فایل های TOML را ایجاد یا نوشتن نمی کند. برای آن به یک ماژول شخص ثالث مانند Tomli-W یا کیت TOML.
گروهبندی اتمی و افزایش سرعت برای regex
ماژول re
پایتون، برای کار با عبارات منظم، فاقد برخی ویژگیهای موجود در سایر پیادهسازیهای عبارات منظم است. یکی گروهبندی اتمی است که به طور گسترده در زبانهای دیگر پشتیبانی میشود. Python 3.11 اکنون با استفاده از نحو رایج برای گروهبندی اتمی از این الگو پشتیبانی میکند (به عنوان مثال، < code>(?>…)).
موتور تطبیق الگوی ماژول re
نیز تا حدودی بازنویسی شده است و حدود ۱۰٪ سریعتر کار می کند.
حذف “باتری های مرده” از کتابخانه استاندارد
PEP 594 تلاشی را برای حذف بسیاری از باتریهای به اصطلاح مرده آغاز کرد. ، یا ماژولهایی که منسوخ یا نگهداری نشدهاند، از کتابخانه استاندارد Python. از پایتون ۳.۱۱، این کتابخانهها بهعنوان منسوخ شده علامتگذاری شدهاند اما هنوز حذف نشدهاند. آنها به طور کامل در پایتون ۳.۱۳ حذف خواهند شد.
اضافات، اصلاحات و تغییرات دیگر Python 3.11
بسیاری از پیشرفتهای کوچکتر نیز در Python 3.11 مشاهده شد:
- اشیاء پایتون به حافظه کمتری نیاز دارند، زیرا فضاهای نام آنها اکنون با تنبلی ایجاد شده است، و فرهنگ لغت فضای نام آنها اکنون کلیدها را در صورت امکان به اشتراک می گذارند.
- لغت نامه هایی که در آنها همه کلیدها یونیکد هستند، دیگر نیازی به ذخیره هش ندارند، بنابراین اندازه فرهنگ لغت کاهش می یابد و کارایی حافظه پنهان بیشتر امکان پذیر می شود.
- زمان اجرای CPython، مفسر مرجع پایتون، اکنون پشتیبانی آزمایشی برای کامپایل شدن دارد به WebAssembly. این ممکن است به توسعه آینده پروژه هایی مانند PyScript کمک کند، که به یک زمان اجرا پایتون کامپایل شده Wasm اجازه می دهد در مرورگر کار کند.
پست های مرتبط
بهترین ویژگی ها و اصلاحات جدید در پایتون ۳.۱۱
بهترین ویژگی ها و اصلاحات جدید در پایتون ۳.۱۱
بهترین ویژگی ها و اصلاحات جدید در پایتون ۳.۱۱