تغییرات Python 3.9
۳۰ مهر ۱۳۹۹

این موضوع واضح است که این نسخه شامل تغییراتی اساسی نسبت به نسخههای قبلی است و مسیر تکاملی پایتون، در واقع قدمی به سمت مسیری جدید خواهد بود. این مقاله شامل موارد زیر میشود:
- مسیر جدید پایتون
- تغییرات parser
- تغییرات در چرخه توسعه
- قابلیتهای جدید
- تعیین نوع دیتای متغیرها یا Type Hinting
- متدهای مرتبط با stringها یا String Methods
- اتصال دیکشنریها به یکدیگر یا Dictionary Unions
در ادامه این قابلیتها و تغییرات را بررسی خواهیم کرد و خواهیم دید که پایتون در کجای مسیرش قرار دارد.
مسیر جدید پایتون
۲ تغییر اساسی در این بروزرسانی وجود دارد که ما هیچ گونه تاثیر چندانی از آنها نخواهیم دید، اما تغییرات پایتون، به عنوان یک زبان برنامهنویسی را بررسی خواهیم کرد.
به صورت خلاصه، بخش تغییرات پایتون، شامل ۲ مورد زیر میشود:
- محدودیتهای parserهای پایتون
- تغییرات کوچک اما زود به زود
LL و PEG
حدود ۳۰ سال پیش، Guido van Rossum، خالق پایتون، pgen، یکی از بخشهای ابتدایی برای پایتون را نوشت. همچنین تا به امروز نیز به عنوان parser پایتون استفاده میشود.
pgen از گرامر و قواعد مختلف LL استفاده میکند. این بدین معنی است که parserمان، کد را از بالا به پایین و از چپ به راست، میخواند و این کار تنها توسط یک token انجام میشود.
این موضوع اساسا چنین چیزی را بیان میکند که توسعه پایتون محدود است، زیرا:
- واضح بود که استفاده از یک token قواعد این زبان را محدود میکند.
- در حال حاضر پایتون شامل گرامری بدون LL میشود که این موضوع را بیان میکند که parser فعلی از راهحلهای بسیار زیاد و پیچیدگی بیش از حد در پراسسها، استفاده میکند.
- حتی با استفاده از این راهحلها، تنها برخی از آنها ممکن و کاربردی هستند. میتوان قوانین را دور زد اما نمیتوان آنها را شکست و یا رعایت نکرد.
- با استفاده از LL، سینتکس بازگشتی به چپ میتواند باعث ایجاد حلقه بینهایت در درخت parse شود که همین موضوع منجر به stack overflow خواهد شد. این موضوع توسط خالق پایتون، در این لینک کاملا توضیح داده شده است.
ویژگیهای parserهای مبتنی بر LL باعث ایجاد محدودیت و غیرممکنکردن ممکنها در پایتون میشود. پایتون نسخه 3.9 این محدودیتها را با توجه به parser جدید PEG که در PEP 617 ارائه شده، از بین برده است.
فورا ما این موضوع را متوجه نخواهیم شد اما هیچ تغییری تا قبل از انتشار نسخه 3.10 پایتون در parser جدید احساس نخواهد شد. اما بعد از آن پایتون از محدودیت LL خلاص خواهد شد.
چرخه توسعه
تا قبل از ارائه نسخه 3.9 پایتون، انتشار نسخههای مختلف آن در بازههای زمانی ۱۸ ماهه برنامهریزی شده بود. اما حالا، شاهد این هستیم که این بازه به ۱۲ ماه کاهش پیدا کرده است (PEP 602) و به جای اینکه هر یک سال و نیم شاهد ارائه یک نسخه جدید باشیم، میتوانیم سالی یکبار، نسخهای جدید را دریافت کنیم و این یعنی:

- انتشار نسخههای جدید، شامل قابلیتهای کمتری خواهد بود.
- ایجاد تغییرات تدریجی، اما ارائه قابلیتهای جدید در نسخههای مختلف و فیکسکردن مشکلات سریعتر خواهد بود.
- تقویم انتشار نسخههای جدید، استوارتر و قابل اطمینانتر خواهد بود و حالا این را میدانیم که در اکتبر هر سال، باید منتظر ارائه نسخه جدیدی از پایتون باشیم.
قابلیتهای جدید
در کنار این تغییرات پشت پردهای، شاهد ارائه قابلیتهای جدیدی برای پایتون هستیم.
تعیین نوع دیتای متغیرها یا Type Hinting
این موضوع به سال ۲۰۰۸ بازمیگردد، زمانی که پایتون 3 یادداشتنویسی یا annotationها را برای توابع معرفی کرد، چیزی که باعث شکلگیری Type Hinting شد. این اتفاق شاید به اندازه کافی بزرگ و قدرتمند نبود، اما به نقطه آغازی برای این موضوع تبدیل شد.

به دنبال این موضوع سایر قابلیتهای بیشتری نیز در گذر زمان اضافه شدند. اما حالا نسخه 3.9، تمام قابلیتهای مختلف را با یک سینتکس جدید و مرتب برای ایجاد بهترین تغییرات و توسعهها در پایتون، کنار هم قرار داده است.
به سادگی میتوانیم نوع دیتایی که برای متغیرهایمان انتظار میرود را مشخص کنیم. اگر بعد از این کار چیزی بنویسیم که منطقی نباشد (مثلا یک رشته یا string
را به یک عدد صحیح یا integer
پاس دهیم)، ویرایشگرمان وجود چنین موضوعی را، به ما اعلام خواهد کرد و اجرای کد، هیچ خطایی را ایجاد نخواهد کرد (متاسفانه)، اما این موضوع به هنگام کار با کدهای پیچیده مفید است. بیایید نگاهی به سینتکس جدید بیاندازیم.
در پایتون، افزودن ۲ رشته توسط +
به یکدیگر، معتبر و قابل استفاده میباشد. پس در تابع add_int
زیر، به هنگام دریافت string
به عنوان ورودی، نباید با خطایی مواجه شویم.

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

با استفاده از سینتکس -> type
به هنگام تعریف تابع، میتوانیم نوع داده خروجی را تعیین کنیم.

و در انتها به این نکته هم اشاره کنیم که در Type Hinting به نوع دادههای ساده و اصلی محدود نیستیم!
متدهای مرتبط با stringها یا String Methods
شاید این تغییر به اندازه سایر تغییرات، چشمگیر نباشد، اما دیدهایم که به دفعات زیاد استفاده شده است. در این نسخه، ۲ متد جدید برای حذف پیشوند و پسوند از string
ها در اختیار داریم:
"foo bar".removeprefix("fo")
[Out]: 'o bar'
"foo bar".removesuffix("ar")
[Out]: 'foo b'
اتصال دیکشنریها به یکدیگر یا Dictionary Unions
در این قسمت ۲ عملگر جدید در رابطه با اتصال یا اجرای Union بر روی دیکشنریها را به شما معرفی کنیم.
اولین عملگر، عملگر ادغام یا merge است: |
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
c = a | b
print(c)
[Out]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
و بعدی عملگر بروزرسانی یا update است، که عملیات ادغام یا merge را در یک جا انجام میدهد: |=
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
a |= b
print(a)
[Out]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
نگاه به آینده
آینده جذابی برای پایتون، به عنوان یک زبان برنامهنویسی، وجود دارد. همچنین مشاهدهی نحوهی تکامل یک زبان با یک برنامه زمانبندی جدید برای انتشار نسخههای و parserهای جدید، هیجان انگیز خواهد بود.
برای دانلود نسخه 3.9، به این لینک و همچنین برای مشاهده PEPهای جدید، ماژولهای جدید و … (در واقع تمامی تغییرات و قابلیتهای جدید) به این لینک مراجعه کنید.
منبع: https://towardsdatascience.com/python-3-9-9c2ce1332eb4
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza
![liara testimonial]()
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi
![liara testimonial]()
jadi
با قدرت میتونم بگم تیم پشتیانی لیاراliara_cloud@یکی از بهترین تیمهای پشتیبانی که تا حالا دیدم. کارشون ارائه سرویسهای PaaS هست ولی من سوال در سطح برنامه خودمم(نه زیرساخت پلتفرم) که میپرسم بازم کامل و به موقع راهنمایی میکنن.
Amir
![liara testimonial]()
amirmazinani_ir
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi
![liara testimonial]()
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid
![liara testimonial]()
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari
![liara testimonial]()
vanenshi