پیامهای خطای بهتر، پشتیبانی از ابزارهای پروفایل لینوکس و بسیاری از پیشرفتها در نوع اشاره پایتون به تازگی منتشر شده است. بیا یک نگاهی بیندازیم.
- پیام های خطای بهتر
- محدودیتهای کمتر در قالببندی f-string
- پشتیبانی از پروفایل لینوکس perf
- نظارت سریعتر اشکالزدایی/پروفایل
- پروتکل های بافر
- بهبودهای تایپ
- بهبودهای عملکرد
- تغییرات اضافی
زبان برنامه نویسی پایتون هر سال نسخههای جدیدی را منتشر میکند، با نسخه بتای قفلشده در نیمه اول سال و انتشار نهایی در پایان سال.
Python 3.12 به تازگی منتشر شده است. توسعه دهندگان تشویق می شوند این آخرین نسخه را روی کدهای غیر تولیدی امتحان کنند، هم برای تأیید اینکه با برنامه های شما کار می کند و هم برای دریافت ایده ای از اینکه آیا کد شما از مجموعه ویژگی های جدید و بهبود عملکرد در این آخرین نسخه بهره می برد یا خیر. p>
در اینجا خلاصه ای از مهم ترین ویژگی های جدید در Python 3.12 و معنای آنها برای توسعه دهندگان پایتون آمده است.
پیام های خطای بهتر
پیامهای خطا در نسخههای اخیر پایتون دقیقتر (موقعیتهای دقیق در خطوط) و جزئیات بیشتر (پیشنهادات بهتر در مورد آنچه ممکن است اشتباه باشد) میشوند. پایتون ۳.۱۲ پیشرفت های اضافی را به همراه دارد:
- پیشنهادات ماژول وجود ندارد (“آیا X را فراموش کردید وارد کنید؟”) اکنون شامل ماژول هایی از کتابخانه استاندارد می شود.
- پیشنهادات خطای بهتری برای خطای نحوی رایج با import; برای مثال،
import p from m
خطایی را برمیگرداند که از شما میپرسد آیا منظور شمااز m import p
است. - خطاهای وارد کردن برای یک ماژول معین اکنون شامل پیشنهادهایی از فضای نام ماژول وارد شده از آن است. به عنوان مثال، اگر
از thismodule import thisclass
را امتحان کنید وقتی منظور شماThisClass
است، پیشنهادی برایThisClass
دریافت خواهید کرد. NameError
اکنون شاملself نیز میشود.
که در داخل یک نمونه کلاس به نام اضافه میشود (به عنوان مثال،name 'speed' تعریف نشده است. آیا شما به معنای "سرعت خود" است؟
). این به این دلیل است که حذفself
برای متغیرهای مثال منبع رایج خطاها در نمونههای کلاس است.
پیشنهادات
محدودیت های کمتر در قالب بندی f-string
رشتههای F، سیستم راحت پایتون برای انجام قالببندی رشتهها، از نظر نحوه قالببندی به شدت محدود بود. پایتون ۳.۱۲ بسیاری از این محدودیت ها را حذف می کند. تغییرات:
- عبارات رشته F اکنون می توانند هر عبارت معتبر پایتون باشند.
- عبارات رشتهای F اکنون میتوانند حاوی همان نوع نقل قولهایی باشند که برای تنظیم خود رشته f استفاده میشوند. برای مثال،
f"لیست خرید، {"، ".join(groceries)}"
اکنون یک رشته f معتبر است. - عبارات رشتهای F اکنون میتوانند عبارات چند خطی باشند، به شرطی که از قوانین یکسانی برای سایر عبارات چند خطی پیروی کنند (به عنوان مثال، استفاده از پرانتز برای اجازه دادن به عبارات برای گسترش چندین خط).
- تعریف کاراکترهای بک اسلش و یونیکد اکنون در رشته های f مجاز است. میتوانید از همه چیز، از کاراکترهای کنترلی ساده (
\n
) تا ارجاع به فضای نام یونیکد (\N{POUND SIGN}
) استفاده کنید. - خطاهای درون عبارات f-string اکنون محل دقیق خطا را در داخل عبارت محصور نشان می دهد، نه فقط در خود عبارت. این کار ردیابی و عیبیابی خطاهای f-string را آسانتر میکند.
پشتیبانی از پروفایل لینوکس perf
ابزار نمایه ساز لینوکس که به طور گسترده مورد استفاده قرار می گیرد perf
با پایتون کار می کند، اما فقط اطلاعات مربوط به آنچه در سطح C در زمان اجرا پایتون اتفاق می افتد را برمی گرداند. اطلاعات مربوط به عملکردهای واقعی برنامه پایتون نمایش داده نمیشود.
Python 3.12 حالت انتخاب کردن را فعال می کند اجازه می دهد perf
برای جمع آوری جزئیات برنامه های پایتون، نه فقط زمان اجرا. انتخاب کردن را می توان در سطح محیط یا داخل یک برنامه پایتون با تابع sys.activate_stack_trampoline
انجام داد.
نظارت سریعتر اشکالزدایی/پروفایل
اجرای یک پروفایلر یا پیوست کردن یک دیباگر به یک برنامه پایتون به شما دید و بینش نسبت به کارهایی که برنامه انجام می دهد می دهد. هزینه عملکرد نیز دارد. برنامهها زمانی که از طریق یک اشکالزدا یا نمایهساز اجرا میشوند، میتوانند به اندازه یک مرتبه کندتر اجرا شوند.
PEP 669 قلابهایی را برای رویدادهای شی کد فراهم میکند که نمایهسازها و اشکالزداها میتوانند به آن متصل شوند، مانند به عنوان شروع یا پایان یک تابع. یک تابع تماس می تواند توسط یک ابزار ثبت شود تا هر زمان که چنین رویدادی ایجاد می شود، فعال شود. همچنان عملکردی برای نمایهسازی یا اشکالزدایی وجود خواهد داشت، اما تا حد زیادی کاهش مییابد.
پرتکل های بافر
پروتکل بافر پایتون راهی برای دسترسی به ناحیه خام حافظه که توسط بسیاری از اشیاء پایتون پیچیده شده است، مانند bytes
یا bytearray
فراهم میکند. اما بیشتر تعاملات با پروتکل بافر از طریق پسوندهای C اتفاق می افتد. تا به حال، برای کد پایتون این امکان وجود نداشته است که بداند آیا یک شی معین از پروتکل بافر پشتیبانی می کند یا اینکه کد را به عنوان سازگار با پروتکل تایپ کند.
PEP 688 روشهای dunder جدیدی را برای اشیا پیادهسازی میکند که به کد پایتون اجازه میدهد با بافر کار کند. پروتکل این کار نوشتن اشیایی را در پایتون آسانتر میکند که بافرهای دادهشان را نشان میدهند، بهجای نوشتن آن اشیاء در C. یک شی memoryview
برمی گرداند. روش __release_buffer__
برای آزادسازی حافظه مورد استفاده برای بافر استفاده میشود.
در حال حاضر، روشهای PEP 688 راهی برای نشان دادن اینکه آیا بافر معین فقط خواندنی است یا نه، ندارند – که اگر با دادههای یک شیء تغییرناپذیر مانند bytes
اما درب برای افزودن آن ویژگی در صورت نیاز باز است.
بهبودهای تایپ
دستور نوع اشاره پایتون که در Python 3.5 اضافه شده است، به ابزارهای پردهبندی اجازه میدهد تا طیف گستردهای از خطاها را زودتر تشخیص دهند. با هر نسخه جدید، تایپ کردن در پایتون ویژگیهایی را به دست میآورد که طیف وسیعتری از موارد استفاده را پوشش میدهد.
TypedDict
در پایتون ۳.۱۲، میتوانید از TypedDict
به عنوان منبع انواع برای اشاره به آرگومانهای کلیدواژه مورد استفاده در یک تابع استفاده کنید. Unpack variadic generic، معرفی شده در نسخه ۳.۱۱، برای این مورد استفاده می شود. در اینجا یک مثال از PEP مربوطه آمده است:
class Movie(TypedDict):
name: str
year: int
def foo(**kwargs: Unpack[Movie]) -> None: ...
در اینجا، foo
میتواند آرگومانهای کلیدواژه نامها و انواعی را که با محتوای فیلم
—name:str
و مطابقت دارند، دریافت کند. year:int
. یکی از سناریوهایی که در آن مفید است، توابع نوع اشاره است که آرگومان های اختیاری فقط برای کلمه کلیدی را بدون مقادیر پیش فرض می گیرند.
نحو پارامتر را تایپ کنید
نحو پارامتر نوع روش تمیزتری برای تعیین انواع در یک کلاس عمومی، تابع ارائه میکند. ، یا نام مستعار را تایپ کنید. در اینجا یک مثال از PEP گرفته شده است:
# the old method
from typing import TypeVar
_T = TypeVar("_T")
def func(a: _T, b: _T) -> _T:
...
# the new type parameter method
def func[T](a: T, b: T) -> T:
...
با روش جدید، نیازی به وارد کردن TypeVar
نیست. فقط می توان از نحو func[T]
برای نشان دادن ارجاعات نوع عمومی استفاده کرد. همچنین میتوان کرانهای نوع را مشخص کرد، مانند اینکه آیا یک نوع معین یکی از گروههایی از انواع است، اگرچه چنین انواعی به خودی خود نمیتوانند عمومی باشند. یک مثال func[T: (str,int)]
است.
در نهایت، @override decorator جدید میتواند برای پرچمگذاری روشهایی استفاده شود که روشها را لغو میکنند. والدین، به عنوان راهی برای اطمینان از هرگونه تغییر ایجاد شده در والدین در طول تغییر نام (تغییر نام یا حذف) در فرزندان او نیز منعکس می شود.
بهبودهای عملکرد
با Python 3.11، تعدادی از پروژههای متحد برای بهبود عملکرد Python با هر نسخه جدید به صورت جهشی انجام شد. بهبود عملکرد در Python 3.12 چندان چشمگیر نیست، اما همچنان قابل توجه است.
خطسازی درک مطلب
Comprehensions، نحوی که به شما امکان میدهد بهسرعت فهرستها، واژهنامهها و مجموعهها را بسازید، اکنون “داخلی” ساخته میشوند نه از طریق اشیاء موقت. سرعت برای این مورد در حدود ۱۱٪ برای یک مورد واقعی و تا دو برابر سریعتر برای یک میکرو بنچمارک است.
اشیاء جاودانه
هر شی در پایتون دارای یک تعداد مرجع است که تعداد دفعاتی که اشیاء دیگر به آن ارجاع می دهند را ردیابی می کند، از جمله اشیاء داخلی مانند هیچ
. PEP 683 به اشیاء اجازه می دهد تا به عنوان “جاودانه” در نظر گرفته شوند، به طوری که هرگز تعداد مرجع خود را نداشته باشند تغییر کرد.
جاودانگی کردن اشیا پیامدهای قدرتمند دیگری برای پایتون در دراز مدت دارد. اجرای مقیاسبندی چند هستهای و پیادهسازی بهینهسازیهای دیگر (مانند را آسانتر میکند. اجتناب از کپی در نوشتن) که قبلاً اجرای آن دشوار بود.
اندازه های کوچکتر اشیا
با نسخه های قبلی پایتون، اندازه پایه یک شی ۲۰۸ بایت بود. اشیاء در چند نسخه اخیر پایتون چندین بار بازسازی شده اند تا آنها را کوچکتر کنند، که نه تنها به اشیاء بیشتری اجازه می دهد در حافظه زندگی کنند، بلکه به محلی بودن حافظه پنهان کمک می کند. از پایتون ۳.۱۲، اندازه پایه یک شی در حال حاضر ۹۶ بایت است – کمتر از نیمی از آنچه قبلا بود.
مترجمان فرعی
یکی از ویژگیهای مورد انتظار پایتون مفسرهای فرعی است – توانایی داشتن چندین نمونه از یک مفسر، که هر کدام دارای GIL خاص خود هستند و در یک فرآیند پایتون در کنار یکدیگر اجرا میشوند. این یک گام بزرگ به سمت موازی سازی بهتر در پایتون خواهد بود.
با این حال، نسخه ۳.۱۲ فقط شامل موارد داخلی CPython است تا این امکان را فراهم کند. هنوز هیچ رابط کاربری نهایی برای مترجمان فرعی وجود ندارد. یک ماژول استاندارد کتابخانه، مفسران
، برای انجام این کار در نظر گرفته شده است. اما اکنون قرار است در پایتون ۳.۱۳ ظاهر شود.
تغییرات اضافی
Python 3.12 علاوه بر تغییرات بزرگی که تاکنون مورد بحث قرار گرفته است، تغییرات کوچک بیشماری دیگر نیز ارائه میکند. این یک نگاه سریع است.
API ناپایدار
یک پروژه کلیدی در حال انجام، بازسازی اجزای داخلی CPython، به ویژه مجموعه های API آن است، به طوری که تعداد کمتری از عملکردهای سطح پایین CPython باید در معرض نمایش قرار گیرند. Python 3.12 سطح API ناپایدار را معرفی کرد. مجموعه API مشخصاً بهعنوان احتمال تغییر بین نسخهها علامتگذاری شده است. در نظر گرفته شده است که اکثر برنامه های افزودنی C از آن استفاده کنند، بلکه توسط ابزارهای سطح پایین مانند اشکال زدا یا کامپایلرهای JIT استفاده می شود.
منسوخ شدن و حذف کتابخانه استاندارد
در نسخه ۳.۱۱، تعدادی از ماژولهای کتابخانه استاندارد که مدتهاست منسوخ شدهاند (به اصطلاح باتریهای مرده) برای حذف در پایتون ۳.۱۲ و ۳.۱۳ پرچمگذاری شدهاند. در نسخه ۳.۱۲، یکی از بزرگترین حذف ها distutils
بود که مدت هاست توسط setuptools
حذف شده است. ماژول های دیگر حذف شده در این نسخه عبارت بودند از asynchat، asyncore
(هر دو با asyncio
جایگزین شدند)، و smtpd
.
جمع آوری زباله
مکانیسم جمعآوری زباله پایتون (GC) میتوانست هر زمان که یک شی تخصیص داده میشد، اجرا شود. از پایتون ۳.۱۲، GC فقط بر روی مکانیسم “Eval breaker” در حلقه بایت کد پایتون اجرا می شود – یعنی بین اجرای یک بایت کد و دیگری. همچنین هر زمان که مکانیسم کنترل سیگنال CPython فراخوانی شود، اجرا می شود. این امکان اجرای دوره ای GC را در یک تماس طولانی مدت با یک برنامه افزودنی C در خارج از زمان اجرا فراهم می کند.
پست های مرتبط
بهترین ویژگی ها و اصلاحات جدید در پایتون ۳.۱۲
بهترین ویژگی ها و اصلاحات جدید در پایتون ۳.۱۲
بهترین ویژگی ها و اصلاحات جدید در پایتون ۳.۱۲