تغییرات Python 3.9


۳۰ مهر ۱۳۹۹
تغییرات 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 شد. این اتفاق شاید به اندازه کافی بزرگ و قدرتمند نبود، اما به نقطه آغازی برای این موضوع تبدیل شد.

وضعیت فعلی Type Hinting در پایتون
وضعیت فعلی Type Hinting در پایتون، نتیجه انباشته‌شدن و کنار هم قرار گرفتن اضافات و تغییرات مختلف در annotationها و typingها، در گذر زمان است.

به دنبال این موضوع سایر قابلیت‌های بیشتری نیز در گذر زمان اضافه شدند. اما حالا نسخه 3.9، تمام قابلیت‌های مختلف را با یک سینتکس جدید و مرتب برای ایجاد بهترین تغییرات و توسعه‌ها در پایتون، کنار هم قرار داده است.

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

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

تفاوت استفاده و عدم استفاده از Type Hinting
تصویر سمت چپ: عدم استفاده از Type Hinting تصویر سمت راست: پایتون 3.9 و استفاده از Type Hinting

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

استفاده از Type Hinting و مشخص‌کردن نوع داده ورودی و خروجی
استفاده از Type Hinting و مشخص‌کردن نوع داده ورودی و خروجی

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

استفاده از Type Hinting برای نوع داده‌های پیچیده‌تر
می‌توانیم از Type Hinting برای تعریف نوع داده‌های پیچیده‌تر نیز استفاده کنیم.

و در انتها به این نکته هم اشاره کنیم که در 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

برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

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

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi