۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

بهترین ویژگی ها و اصلاحات جدید در پایتون ۳.۱۱

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

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

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

Python 3.11 به تازگی منتشر شده است، و توسعه دهندگان تشویق می شوند امتحان کنند این آخرین نسخه را در مورد کدهای غیر تولیدی منتشر کنید، هم برای تأیید اینکه با برنامه های شما کار می کند و هم برای دریافت ایده ای از اینکه آیا کد شما از بهبود عملکرد آن سود می برد یا خیر.

در اینجا خلاصه ای از مهم ترین ویژگی های جدید در Python 3.11 و معنای آنها برای توسعه دهندگان Python آمده است.

بهبود سرعت

بسیاری از پیشرفت‌های عملکرد فردی در Python 3.11 ایجاد شد، اما بزرگترین اضافه شده مفسر تطبیقی ​​تخصصی. از آنجایی که نوع یک شی به ندرت تغییر می کند، مفسر اکنون سعی می کند کدهای در حال اجرا را تجزیه و تحلیل کند و بایت کدهای عمومی را با کدهای نوع خاص جایگزین کند. به عنوان مثال، عملیات باینری (افزودن، تفریق، و غیره) را می توان با نسخه های تخصصی برای اعداد صحیح، شناورها و رشته ها جایگزین کرد.

فراخوانی تابع پایتون نیز به سربار کمتری در پایتون ۳.۱۱ نیاز دارد. اکنون فریم‌های پشته‌ای برای فراخوانی عملکرد از حافظه کمتری استفاده می‌کنند و کارآمدتر طراحی می‌شوند. همچنین، در حالی که تماس‌های بازگشتی به‌صورت دنباله‌دار بهینه‌سازی نشده‌اند (که احتمالاً به هر حال در پایتون امکان‌پذیر نیست)، نسبت به نسخه‌های قبلی کارآمدتر هستند. خود مفسر پایتون نیز سریع‌تر شروع می‌شود و ماژول‌های اصلی مورد نیاز برای زمان اجرا پایتون با کارایی بیشتری ذخیره و بارگذاری می‌شوند.

طبق مجموعه معیار رسمی پایتون، پایتون ۳.۱۱ حدود ۱.۲۵ برابر سریعتر از پایتون ۳.۱۰ اجرا می شود. توجه داشته باشید که این افزایش سرعت یک معیار جمع است. برخی از چیزها بسیار سریعتر اجرا می شوند، اما بسیاری دیگر فقط کمی سریعتر یا تقریباً یکسان هستند. با این حال، بهترین بخش در مورد این پیشرفت ها این است که آنها به صورت رایگان ارائه می شوند. برای بهره مندی از سرعت بالای پایتون ۳.۱۱، نیازی به تغییر کد برای برنامه های پایتون ندارید.

با Olive برنامه‌های هوش مصنوعی شتاب‌دار برای NPU بسازید

اطلاعات خطای پیشرفته

یکی دیگر از ویژگی های فورا مفید در پایتون ۳.۱۱ پیام های خطای دقیق تر است. پایتون ۳.۱۰ قبلاً به لطف تجزیه کننده جدید مورد استفاده در مفسر، گزارش خطای بهتر داشت. اکنون، 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

اکنون هیچ ابهامی در مورد اینکه مشکل کجاست وجود ندارد.

بهبودهای استثنا

استثناها، مکانیسم رسیدگی به خطای پایتون، بسیاری از ویژگی‌های جدید را در پایتون ۳.۱۱ دریافت کرده‌اند:

بهبودهای تایپ

ویژگی‌های اشاره به نوع پایتون، مدیریت و تجزیه و تحلیل پایگاه‌های کد بزرگ‌تر را آسان‌تر می‌کند و از زمان پایتون ۳.۵ با هر بازبینی به‌طور قابل‌توجهی افزایش یافته است. 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 اجازه می دهد در مرورگر کار کند.