پایتون ۳.۸ آخرین نسخه از پایتون است که به صورت بتا منتشر شده و همراه با خود ویژگیهای مختلفی را ارائه کرده است. در بین این ویژگیها میتواند به تغییرات سینتکسی، اشتراک حافظه، بهینهتر کردن عملیاتهای Serialization و Deserialization، دیکشنریهای اصلاح شده و… اشاره کرد.
طبیعتا کاربران انتظار داشتند تا پایتون ۳.۸ همراه با ساختاری بهینه در کارایی عرضه شود که باید بگویم در نتیجه نهایی آن میشود این مورد را مشاهده کرد. پایتون ۳.۸ نسبتا سریعتر و سازگارتر از نسخههای قبلی خود است.
در این مطلب از وبسایت راکت قصد داریم در ارتباط با بهترین ویژگیهای جدیدی که به پایتون ۳.۸ اضافه شده است صحبت کنیم و آن را مورد بررسی قرار دهیم.
عبارتهای انتسابی
یکی از چشمگیرترین تغییراتی که میشود آن را در پایتون ۳.۸ مشاهده کرد عبارتهای انتسابی است که با عملگر =: شناخته میشود. این عملگر به ما کمک میکند تا مقداری را در یک عبارت دیگر به متغیری نسبت دهیم -حتی اگر متغیر نیز ایجاد نشده باشد این دستور کار خود را انجام میدهد-. ما قبلا برای انتساب یک مقدار به یک متغیر از یک خط کد جداگانه استفاده میکردیم اما حال میتوانیم در عبارات تو در تو نیز این فرایند را انجام دهیم.
while (line := file.readline()) != "end":
print(chunk)
در مثال بالا متغیر line حتی اگر وجود هم نداشته باشد از ابتدا ایجاد شده و با مقدار file.readline() مقداردهی میشود. بعد از آن مقدار line با "end” بررسی میشود، اگر این مقادیر برابر نبودند خط بعدی اجرا میشود.
ایده اصلی که پشت این مطلب بوده آن است که بتوانیم با کدنویسی کمتری فرایند انتساب را انجام دهیم. اما در نهایت ویژگی جدیدی به کدها افزوده نشده است، بلکه تنها میتوان به عنوان یک میانبر از آن یاد کرد.
پارامترهای فقط موقعیتی
در سینتکس جدید پایتون پارامترهای موقعیتی باعث میشوند تا یکسری از آرگومانها تنها به صورت موقعیتی فراخوانی شوند. این موضوع باعث میشود تا ابهام مربوط به اینکه کدام آرگومان موقعیتی و کدام کلیدی است حذف شود.
def pow(x, y, z=None, /):
r = x**y
if z is not None:
r %= z
return r
در این مثال پارامتر (/) آرگومانهای موقعیتی و کلیدی را از همدیگر جدا میکند. در این حالت تمام آرگومانهای ورودی به صورت موقعیتی فراخوانده میشوند اما در نسخههای قبلی پایتون z به عنوان یک آرگومان کلیدی شناخته خواهد شد. از این رو اگر در مثال بالا تابع را به صورت pow(2,10) و یا pow(2,10,5) فراخوانی کنیم مشکلی پیش نخواهد آمد اما اگر pow(2,10,z=5) را فراخوانی کنیم برنامه برای ما خطا برمیگرداند.
پشتیبانی از دیباگینگ F-string
قالب رشتهای F به ما کمک میکند تا بتوانیم با روشی سادهتر یک رشته را با ترکیبی از متغیرها چاپ کنیم. حال در پایتون ۳.۸ میتوانیم کارکردهای دیگری را نیز در این قالب مشاهده کنیم:
x = 3
print(f'{x+1}')
این کار خروجی 4 را به ما نشان میدهد.
اما اگر یک علامت مساوی را نیز در آخر آن قرار دهیم خود عبارت نیز چاپ خواهد شد. برای مثال:
x = 3
print (f'{x+1=}')
خروجی این دستور x+1=4 خواهد بود.
حافظه اشتراکی Multiprocessing
در پایتون ۳.۸ ماژول multiprocessing کلاس جدیدی را با نام SharedMemory ارائه میکند که اجازه میدهد تا یک قسمت جدید از حافظه ایجاد شده و بین پردازشهای مختلف پایتون به اشتراک گذاشته شود.
در نسخههای قبلی از پایتون دادهها تنها میتوانستند در عملیات نوشتن فایل، برنامهنویسی سوکت و عملیات Serialization با کمک ماژول pickle بین پروسهها به اشتراک گذاشته شوند. با به اشتراک گذاشتن حافظه میتوان پردازشهای داده را بسیار سریعتر از قبل انجام داد.
بهبود در ماژول typing
پایتون یک زبان برنامهنویسی پویا است اما با استفاده از ماژول typing قابلیت پیادهسازی حالتهای مشابه با زبانهای استاتیک را به ما میدهد. پایتون ۳.۸ نوعهای جدیدی را به این کتابخانه اضافه کرده که باعث میشود تا عملیات بررسی بسیار قدرتمندتر صورت بگیرد.
در بین این نوعهای جدید میتوان به دکوراتور final و نوع Final اشاره کرد که باعث میشوند تا یک دکوراتور نتواند override بشود.
نوع Literal نیز عبارتها را به یک مقدار خاص محدود میکند.
نوع TypeDict به شما اجازه میدهد تا مقدار مربوط به یک کلید در یک دیکشنری را به یکسری نوعهای خاص محدود کنید.
نسخهای جدید از پروتکل pickle
ماژول pickle پایتون به شما راهی را برای Serialization و Deserialization ساختارهای دادهای پایتون ایجاد میکند. نسخههای مختلف پایتون با سطوح مختلفی از پروتکل pickle ارائه میشوند که در هر کدام قابلیتهای مختلفی برای انجام فرایند سریالیزه کردن وجود دارد.
دیکشنریهای اصلاحشدنی
دیکشنریها در پایتون نسخه ۳.۶ به صورت کامل از ابتدا نوشته شد. نسخه جدیدی که در این پیادهسازی وجود داشت با مشارکت از طرف پروژه PyPy انجام شد. کل قضیه این ساختار جدید رسیدن به سرعت و کارایی بیشتر بود. حال در پایتون ۳.۸ یک متد جدید به نام reversed() اضافه شده که قابلیت اعمال روی دیکشنریها را دارد.
بهبودهای کارایی
- بسیاری از توابع و متدها بین ۲۰ تا ۵۰ درصد سریعتر از حالتهای قبلی اجرا میشوند. اینکار با حذف یکسری عملیاتهای تبدیل انجام شد.
- از طریق یکسری opcodeها سرعت پایتون در این نسخه افزایش پیدا کرده است. در این نسخه LOAD_GLOBAL را در نظر گرفتهاند اما برنامه به این صورت است که در نسخههای بعدی پایتون گزینههای دیگری را نیز در نظر بگیرند.
- عملیاتهای کپی فایل مانند shutil.copyfile() و shutil.copytree() حال با سرعت و بهینهسازی بیشتری انجام میشوند.
- لیستهای پایتونی جدید ۱۲ درصد کوچکتر از پیادهسازی قبلی هستند. این کار با بهینهسازیهای بالایی که انجام شده صورت گرفته است.
- نوشتن روی خصوصیات کلاسها حال بسیار سریعتر انجام میشود.
- operator.itemgetter() و collections.namedtuple() نسبت به گذشته بهبودهایی را دریافت کردهاند.
بهبودهای Cpython و Python C API
در نسخههای اخیر پایتون بیشتر کارها با اصلاح C APIهای استفاده شده در Cpython انجام شده است. تا به اینجای کار نیز تغییرات مثبت بوده و موارد جدیدی را با خود به همراه داشته اما فارغ از آنها موارد زیر را نیز میتوان در نظر گرفت:
- یک C API جدید برای Python Initialization Configuration. با استفاده از این قابلیت کنترل کاملتری روی روتینهای مقداردهی اولیه پایتون خواهیم. این کار باعث میشود تا بتوانیم با سرعت و آسانی بیشتری محیط اجرایی پایتون را در اپلیکیشنهای مختلف استفاده کنیم.
- پروتکل فراخوانی vectorcall یکی دیگر از ویژگی های جدید مربوط به این دستهبندی میشود که البته در نسخه ۳.۸ به صورت ناپایدار حضور دارد اما در پایتون ۳.۹ قرار است به صورت ویژگی پایدار حضور داشته باشد.
- Python runtime audit hooks ویژگی جدیدی است که دو API را برای محیط اجرایی پایتون فراهم کرده است.
در پایان
نسخه جدید پایتون هنوز در حالت بتا قرار دارد و نسخه رسمی آن منتشر نشده؛ ما در این مطلب سعی کردیم تا بهترین ویژگیهای جدیدی که در این نسخه وجود دارد را با شما بررسی کنیم. برای دانلود این نسخه از پایتون میتوانید به این لینک مراجعه نمایید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید