تغییرات پایتون 3.9


نسخه نهایی ورژن 3.9 زبان پایتون به تازگی عرضه شده است، در این نوشته برخی از تغییرات این نسخه را به شما معرفی خواهیم کرد.

با تغییرات موجود در این نسخه مشخص است که پایتون از مسیر تکاملی گذشته خود جدا شده است و قدم در مسیر جدیدی گذاشته است.

در این نسخه جدید شاهد دو تغییر بزرگ هستیم، که البته تاثیر آنها را فورا مشاهده نخواهیم کرد ولی در بلند

مدت متوجه تغییرات تاثیر گرفته از این آپدیت در تکامل و پیشرفت زبان پایتون خواهیم بود.

یک پارسر جدید

حدود 30 سال پیش، Guido van Rossum برنامه pgen را نوشت، یکی از اولین برنامه هایی که با زبان پایتون

نوشته شد. این برنامه تاکنون به عنوان پارسر زبان برنامه نویسی پایتون استفاده شده است.

پایتون از نوعی از گرامر بر پایه (1)LL استفاده می کند. استفاده از این نوع از گرامر به این معناست که پارسر

ما به ترتیب از بالا به پایین و در هر خط به صورت چپ به راست کد را می خواند و در هنگام خواندن هر کلمه از کد ما، یک کلمه جلوتر را نیز در نظر دارد.

استفاده از این گرامر توسعه پایتون را بسیار سخت کرده است، به علت هایی مثل :

  • در نظر داشتن فقط یک کلمه جلوتر از محل فعلی پارسر، باعث پیچیده شدن قواعد گرامر زبان میشود .
  • پایتون در حال حاضر شامل گرامر های دیگری به جز (1)LL نیز هست. این گوناگونی باعث می شود پارسر فعلی زبان مجبور به انجام کارهای پیچیده ای برای اجرای برنامه می شود که پروسه کار زبان را بسیار پیچیده می کند.
  • با وجود اینکه راه حل های موجود تا حدی مشکلات (1)LL را حل می کند، ولی این راه حل ها هم محدود هستند و باز هم مجبور به پیروی از قوانین (1)LL هستند و نمی توانند آنها را نقض کنند.

این مشکلات پارسر به علت استفاده از (1)LL باعث محدودیت در کارهایی که پایتون می تواند انجام دهد می شود.

پایتون 3.9 با استفاده از یک پارسر جدید بر پایه PEG از این مشکلات رهایی یافته است.

ما بلافاصله متوجه تغییرات بر اثر این تغییر نخواهیم شد، چون هیچ تغییری که از این پارسر جدید استفاده کند قبل از عرضه نسخه 3.10 پایتون عملی نخواهد شد. ولی بعذ از نسخه 3.10 زبان از محدودیت های (1)LL آزاد خواهد شد.

چرخه آپدیت جدید پایتون

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

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

  • نسخه های جدید ویژگی های جدید کمتری خواهند داشت.
  • تغییرات در زبان به صورت تدریجی تری خواهند بود و سرعت رفع باگ های موجود بیشتر خواهد بود.
  • خاطر سپردن تاریخ عرضه نسخه جدید پایتون راحت تر خواهد شد و برای فهمیدن آن نیاز به حل معادله ریاضی و یا سرچ در اینترنت نداریم، دیگر می دانیم که اکتبر هر سال یک نسخه جدید ارائه خواهد شد.

البته سرعت پیشرفت کلی زبان تحت تاثیر این تغییر در زمان بندی ارائه نسخه جدید قرار نخواهد گرفت و تنها تغییر این خواهد بود که در آینده شاهد تغییرات کوچک تر در دوره های 12 ماهه به جای تغییرات بزرگ و ناگهانی در دوره های 18 ماهه خواهیم بود.

دیگر ویژگی های جدید در نسخه 3.9

تا الان از تغییرات پایه ای در پشت صحنه زبان و تغییر در زمان بندی ارائه آن صحبت کردیم، چه ویژگی های جدیدی به زبان ارائه شده است که ما بتوانیم آنها را مشاهده و از آنها به طور مستقیم اضافه کنیم؟

1 - توانایی مشخص کردن نوع متغیرها (type hinting)

در پایتون 3.9 ما می توانیم نوع متغیرهایمان را مشخص کنیم. پس اگر یک مقدار نامرتبط به آن اختصاص دادیم (مثلا اختصاص دادن یک رشته به یک متغیر عددی)، ادیتور به ما هشدار خواهد داد.

البته در صورت اشتباه اختصاص دادن نوع متغیر برنامه با اروری مواجه نخواهد شد و فقط به ما هشدار خواهد داد، ولی همان هشدار هم می تواند در کار با کد های پیچیده به ما کمک کند.

در حالت حالت عادی ما اگر بخواهیم یک تابع برای بدست آوردن مربع یک عدد بنویسیم کد ما به صورت زیر خواهد بود :

def add_int(val):
    return val*val

از این نسخه بعد اگر بخواهیم از type hinting برای نوشتن این تابع استفاده کنیم و ورودی خود را به عنوان یک عدد مشخص کنیم، تابع ما به صورت زیر خواهد بود :

def add_int(val: int):
    return val*val

می بینیم که برای این کار کافیست از یک : و سپس نوع متغیرمان استفاده کنیم.

البته این مثال برای مشخص کردن نوع متغیر ورودی بود، می توانیم نوع متغیر خروجی تابع و یا حتی نوع متغیر های یک دیکشنری را نیز مشخص کنیم.

برای مثال در تابع زیر که برای جمع زدن عدد های مقادیر یک دیکشنری است، نوع متغیر ورودی تابع به عنوان یک دیکشنری و خروجی آن به عنوان یک متغیر عددی مشخص شده است :

def sum_dict(var : dict) ->int:
    return sum(var[key] for key in var)

در تابع زیر، برنامه انتظار یک رشته و یک عدد به عنوان کلید و مقدار یک دیکشنری ورودی را خواهد داشت :

def sum_dict(var : dict[str, int]):
    return sum(var[key] for ley in var)

پس اگر مثلا دیکشنری {1:5, 2:7}=test را به عنوان متغیر ورودی به این تابع بدهیم، به ما هشداری برای اشتباه بودن نوع ورودی خواهد داد، چون انتظار یک رشته به عنوان کلید دیکشنری دارد.

2 - دستورات جدید برای ایجاد تغییرات بر روی رشته ها

این تغییر به بزرگی و مهمی تغییراتی که قبلا ذکر شده نیست، ولی این دستورات جدید می توانند کمک به راحت تر شدن کار برنامه نویس ها بکنند.

این دستورات جدید روش مستقیمی برای حذف عبارات از ابتدا و انتهای عبارات به ما می دهد. دستور ( "اضافی" )removesuffix. را اگر در انتهای اسم یک متغیر رشته بیاوریم، به دنبال عبارت "اضافی" در انتهای رشته ما خواهد بود و در صورت وجود آن را حذف خواهد کرد.

دستور ( "اضافی" )removeprefix. هم همین کار را برای حذف عبارت "اضافی" از ابتدای رشته ما تلاش خواهد کرد.

مثال :

&quotfoo bar&quot.removeprefix(&quotfo&quot)

خروجی این کد عبارت 'o bar' خواهد بود.

&quotfoo bar&quot.removesuffix(&quotar&quot)

خروجی این کد عبارت 'foo b' خواهد بود.

3 - الحاق دیکشنری ها

در این نسخه 2 دستور جدید برای به هم چسباندن دیکشنری ها اضافه شده است.

یکی از آنها دستور | است که برای ادغام دیکشنری ها است. این دستور دو دیکشنری را با هم ترکیب می کند و ترتیب در آن اهمیت ندارد . نحوه استفاده این دستور به صورت زیر است :

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'}

دستور دوم |= است که برای به هم چسباندن دیکشنری ها است به طرزی که که در آن ترتیب دیکشنری ها حفظ می شود.

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'}

نگاهی به آینده

پایتون به عنوان یک زبان پراستفاده آینده ی روشنی در پیش رو دارد و ما امیدوارانه منتظر پیشرفت پایتون به کمک پارسر جدید و چرخه آپدیت جدید ی که در این نسخه معرفی شدند هستیم.


امیر هستم از ایران پایتونیرز، ممنونم از وقتی که برای خوندن قسمت دوم این پست گذاشتید.

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

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

منبع : towardsdatascience.com