منوهای نصب در پنل مدیریت

  • ورود
  • هیچ محصولی در سبد خرید نیست.

پایتون 3.9 : ویژگی های جدید و جالب

با توجه به انتشار نسخه جدیدی از ورژن نرم افزار پایتون که معروف به پایتون 3.9 می باشد منتشر شده بر آن شدیم تا مقاله ای مفید و کامل در مورد تغییراتی که در این نرم افزار رخ داده برای کاربران وبسایت پایتونی ها بنویسیم تا تمامی کاربران بتوانند از ویژگی های این نرم افزار جدید استفاده کامل و جامع را ببرند .

فهرست مطالب

جدیدترین PEP ها

از جمله جدیدترین PEP ها می توان به نمونه های زیر اشاره کرد :

  • PEP 584, union operators added to dict;
  • PEP 585, type hinting generics in standard collections;
  • PEP 614, relaxed grammar restrictions on decorators
  • PEP 616, string methods to remove prefixes and suffixes.
  • PEP 593, flexible function and variable annotations;
  • os.pidfd_open() added that allows process management without races and signals.
  • PEP 573, fast access to module state from methods of C extension types;
  • PEP 617, CPython now uses a new parser based on PEG;
  • PEP 615, the IANA Time Zone Database is now present in the standard library in the zoneinfo module;
  • PEP 602, CPython adopts an annual release cycle.


پشتیبانی مناسب از منطقه زمانی

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

با این وجود ، پشتیبانی از کار با مناطق زمانی تا حدودی کمبودی را به وجود می آورد . تا کنون ، روش پیشنهادی کار با مناطق زمانی استفاده از کتابخانه های شخص ثالث مانند dateutil بوده است اما حالا با استفاده از خود کتاب خانه datetime می توانید بدون استفاده از کتاب خانه دیگری به استفاده از مناطق زمانی مورد نیاز خود بهره ببرید .

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

دسترسی به مناطق زمانی

بهترین راه برای دسترسی به منطقه زمانی که در آن قراردارید می توان سایت هایی مانند :


time.is
Time.ir

اما در زبان برنامه نویسی پایتون یکی از بهترین ماژول های که می توان منطقه زمانی را به دست آورد می توان کتابخانه Zoneinfo را نام برد .
این کتابخانه بر مبنای یکی از بنیان گذار های اصلی و مخازن اصلی زمان در اینترنت شناخته میشود که اسم این سازمان به اختصار IANA نامیده می شود و از سال 2019 شروع به پشتیبانی از زبان برنامه نویسی پایتون کرده است .

برای آشنایی بیشتر می توانید از سایت زیر استفاده کنید :


https://www.iana.org/

اما ، چگونه باید از این کتابخانه استفاده کرد ؟
برای استفاده از این کتاب خانه به صورت نمونه می توانید از تکه کد زیر استفاده کنید .

from zoneinfo import ZoneInfo
ZoneInfo("America/Vancouver")

خروجی به صورت :
zoneinfo.ZoneInfo(key='America/Vancouver')

برای استفاده از کتابخانه Zoneinfo می توانید با استفاده از مقاله اصلی زیر به دستورات بیشتر دسترسی داشته باشید . ( روی متن کلیک کنید )

به روزرسانی ساده تر دیکشنری ها

دیکشنری ها یکی از ساختارهای اساسی داده در پایتون هستند. آنها در همه جا در زبان استفاده می شوند و با گذشت زمان کاملاً بهینه شده اند.
روش های مختلفی وجود دارد که می توانید دو دیکشنری را با هم ادغام کنید. با این حال ،دستورزبان برنامه نویسی کمی دست و پا گیر میشود اما در پایتون 3.9 :

>>> pycon = {2016: "Portland", 2018: "Cleveland"}
>>> europython = {2017: "Rimini", 2018: "Edinburgh", 2019: "Basel"}

>>> {**pycon, **europython}
{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}

>>> merged = pycon.copy()
>>> for key, value in europython.items():
...     merged[key] = value
...
>>> merged
{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}

هر دوی این روش ها دیکشنری ها را بدون تغییر داده های اصلی ادغام می کنند. توجه داشته باشید که “Cleveland”در ادغام “Edinburgh” رونویسی شده است. همچنین می توانید دیکشنری را در محل خود به روز کنید به تکه کد زیر دقت کنید :

>>> pycon.update(europython)
>>> pycon
{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}

اگرچه این فرهنگ لغت اصلی شما را تغییر می دهد. به یاد داشته باشید که .update () دیکشنری به روز شده را بر نمی گرداند ، بنابراین بهترین راه استفاده از .update () در حالی که داده های اصلی را دست نخورده نگه می دارد ، چندان خوب کار نمی کند:

>>> pycon = {2016: "Portland", 2018: "Cleveland"}
>>> europython = {2017: "Rimini", 2018: "Edinburgh", 2019: "Basel"}

>>> merged = pycon.copy().update(europython)  # Does NOT work
>>> print(merged)
None

به روزرسانی ساده تر دیکشنری ها

اتصال دیکشنری‌ها به یکدیگر یا Dictionary Unions

ادغام (|)
و بروزرسانی کنید (|=)
اپراتورهایی هستند که اضافه شده اند در ورژن جدید پایتون به قسمت دیکشنری ها و با استفاده از این 2 اپراتور شما خیلی راحت تر می توانید به ادغام دو دیکشنری بپردازید . به صورت مثال به دو نمونه از کد های زیر دقت کنید .

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

برای یافتن توضیحات بیشتر و کامل تر می توانید به مقاله اصلی در این لینک مراجعه کنید .

تجزیه کننده جدید پایتون

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

به صورت خلاصه، بخش تغییرات پایتون، شامل ۲ مورد زیر می‌شود:

  • محدودیت‌های 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 خلاص خواهد شد.

حذف پیشوند و پسوند رشته ها

2 متود جدید به این رشت ها اضافه شده که با استفاده از این متود ها می توانید به حذف پیشوند و یا پسوند هایی که در رشته ها اضافه می شود بپردازید . این متود ها به شرح زیر می باشند :

str.removeprefix(prefix)
str.removesuffix(suffix)

به تکه کد زیر به صورت نمونه دقت کنید :
برای به دست آوردن اطلاعات بیشتر می توانید از آدرس این لینک و یا PEP616 استفاده کنید .

کد اول :
>>>"foo bar".removeprefix("fo")
>>>[Out]: 'o bar'

کد دوم :
>>>"foo bar".removesuffix("ar")
>>>[Out]: 'foo b'

نوع اشاره یا TypeHint

نوع اشاره چیست ؟
پایتون در سال های اخیر به نوعی یاداشت گذاری روی آورده که معنا و مفهوم خاصی به توابع خروجی می دهند و توان برای خروجی های توابع تعیین نمود که به صورت مثال خروجی آن ها اعداد به صورت حسابی باشند و به صورت اعشاری به طور مثال به تکه کد زیر دقت کنید :

def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)

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

مقسوم علیه

مقسوم علیه یک عدد ویژگی مهمی است که در رمزنگاری و سایر زمینه ها کاربرد دارد. پایتون برای محاسبه بزرگترین تقسیم کننده مشترک (GCD) از دو عدد برای مدت زمان طولانی تابعی داشته است:

>>> import math
>>> math.gcd(49, 14)
7

مقسوم علیه از 49 و 14 7 است زیرا 7 بزرگترین عددی است که 49 و 14 را تقسیم می کند.

این مثال فقط یک مثال ساده از اضافه شدن چند تابع به ماژوال math است . که تابع اضافه شده به شرح زیر است .

  • math.gcd()
    •  math.lcm()
    • math.nextafter()
    • math.ulp()

کدهای وضعیت جدید HTTP

IANA جز منبع اصلی زیرساخت اینترنتی ، از جمله پایگاه داده منطقه زمانی را که قبلاً مشاهده کردید ، زمان را هماهنگ می کند. یکی دیگر از کار های این منبع ، HTTP Status Code Registry است یا همان کدهای وضعیت HTTP که در کتابخانه استاندارد http موجود است به صورت مثال به کد زیر دقت کنید :

>>> from http import HTTPStatus
>>> HTTPStatus.OK
<HTTPStatus.OK: 200>

>>> HTTPStatus.OK.description
'Request fulfilled, document follows'

>>> HTTPStatus(404)
<HTTPStatus.NOT_FOUND: 404>

>>> HTTPStatus(404).phrase
'Not Found'

در پایتون 3.9 ، کد جدید وضعیت HTTP 103 (نکات اولیه) و 425 (خیلی زود) به http اضافه شده است:

>>> from http import HTTPStatus
>>> HTTPStatus.EARLY_HINTS.value
103

>>> HTTPStatus(425).phrase
'Too Early'

حذف کد ها و توابع منسوخ شده

یک نقطه عطف بسیار مهم برای پایتون در سال گذشته حذف پایتون 2 بود. پایتون 2.7 اولین بار در سال 2010 منتشر شد. در 1 ژانویه سال 2020 ، پشتیبانی رسمی از پایتون 2 پایان یافت.
پایتون 2 نزدیک به بیست سال به خوبی به جامعه برنامه نویسیان خدمت کرده است و بسیاری از او به خوبی یاد می کنند . در عین حال ، فارغ از نگرانی در مورد سازگاری پایتون 3 با پایتون 2 ، به توسعه دهندگان اصلی این امکان را می دهد تا بر بهبود مستمر پایتون 3 تمرکز کرده و در طول راه کد های خود را به خوبی به پایتون 3 انتقال دهند.
بسیاری از توابع که منسوخ شده اند اما برای سازگاری با پایتون 2 در گذشته نگهداری شده اند ، در Python 3.9 حذف شده اند. چند مورد دیگر در Python 3.10 وجود دارد که آن ها نیز حذف خواهند شد. اگر فکر می کنید که کد شما از هر یک از این ویژگی های قدیمی استفاده می کند ، سعی کنید آن را در حالت توسعه اجرا کنید به صورت مثال به تکه کد زیر دقت کنید :

python -X dev script_name.py

استفاده از حالت توسعه ارور های بیشتری را به شما نشان می دهد که می تواند به شما کمک کند تا کد خود را در اصلاح و به ورژن جدید پایتون انتقال دهید . برای کسب اطلاعات بیشتر در مورد ویژگی های حذف شده به موارد جدید در پایتون 3.9 مراجعه کنید.

نسخه بعدی پایتون چه زمانی می آید؟

یک تغییر نهایی در پایتون 3.9 غیر مرتبط با کد توسط این مقاله به وحود آمده که روند توسعه زمانی در برنامه نویسی را به خوبی بیان می کند به تصویر زیر دقت کنید :

تا قبل از ارائه نسخه 3.9 پایتون، انتشار نسخه‌های مختلف آن در بازه‌های زمانی ۱۸ ماهه برنامه‌ریزی شده بود. اما حالا، شاهد این هستیم که این بازه به ۱۲ ماه کاهش پیدا کرده است(PEP 602) و به جای اینکه هر یک سال و نیم شاهد ارائه یک نسخه جدید باشیم، می‌توانیم سالی یکبار، نسخه‌ای جدید را دریافت کنیم و این یعنی:

وحالا روند تغییر پشتیبانی از زبان برنامه نویسی پایتون به شرح زیر می باشد :

1½ سال پشتیبانی کامل ، 3½ سال دیگر رفع مشکلات امنیتی
در هجده ماه اول (1 سال) به روزرسانی باگفیکس را دریافت می کند و نسخه های کامل (منابع و نصب کننده های ویندوز و macOS) تقریباً هر ماه دیگر ساخته می شوند.
برای چهل و دو ماه آینده (3½ سال) به روزرسانی های امنیتی دریافت می کند و نسخه های منبع فقط بر اساس نیاز انجام می شوند
آخرین نسخه فقط برای پنج سال بعد از نسخه 3.0 ساخته شده است.

آیا باید همچنان از پایتون های ورژن قدیمی تر استفاده کنیم و یا به پایتون 3.9 نقل مکان کنیم ؟

برای شروع با ویژگی های جدید ، اگر می خواهید هر یک از ویژگی های جالبی را که گفته شد را امتحان کنید ، پس باید از Python 3.9 استفاده کنید. نصب آخرین نسخه در کنار نسخه فعلی پایتون امکان پذیر است. ساده ترین راه استفاده از محیط های کد نویسی مانند pyenv یا conda است و یا حتی می توانید از Docker برای اجرای پایتون جدید استفاده کنید .

اما ، وقتی می خواهید به پایتون 3.9 ارتقا پیدا کنید ، دو سوال متفاوت وجود دارد که باید از خود بپرسید:
1-آیا باید توسعه دهنده یا محیط تولید خود را به Python 3.9 ارتقا دهید؟
2-آیا باید پروژه خود را به پایتون 3.9 وابسته کنید تا بتوانید از ویژگی های جدید استفاده کنید؟

اگر کدی دارید که در Python 3.8 به راحتی کار می کند ، پس در اجرای همان کد در Python 3.9 باید چند مشکل داشته باشید. اگر به عملکردهایی اعتماد کنید که در نسخه های قبلی پایتون منسوخ شده اند و اکنون حذف می شوند ، اصلی ترین مانع بر سر راه شما خواهد بود پس سعی کنید اول مواردی که در پایتون نسخه 3.9 آپدیت شده را به خوبی بیاموزید و بعد به انتفال پروژه های خود به ورژن جدید پایتون روی آورید .

تجزیه کننده جدید PEG طبیعتاً به اندازه نمونه قدیمی آزمایش نشده است. اگر بدشانس باشید ، به احتمال زیاد با ارور های عجیب و غریب مواجه خواهید شد.

در مجموع ، باید کاملاً ایمن و راحت محیط خود را به جدیدترین نسخه پایتون در زمان مناسب برای شما ارتقا دهید. اگر می خواهید کمی محافظه کارانه عمل کنید ، می توانید منتظر اولین نسخه به اصطلاح Stable ، پایتون یعنی نسخه 3.9.1 باشید تا احیانا با ارور های عجیب و غریب و مختلف روبهرو نشوید .

اما اینکه آیا واقعاً می توانید از ویژگی های جدید پایتون در کد های خود استفاده کنید بسیار به میزان تجربه شما درکد نویسی بستگی دارد . اگر کد شما فقط در محیط هایی اجرا می شود که می توانید آن را کنترل و به Python 3.9 ارتقا دهید و شک نکنید اما اگر کد های شما برای یک پروژه تجاری در حال استفاده می باشد در این حالت به هیچ وجه ریسک نکنید .

با این حال ، اگر کتابخانه ای را توسعه می دهید که مورد استفاده بسیاری از افراد دیگر است ، بهتر است محافظه کار باشید. آخرین نسخه Python 3.5 در سپتامبر منتشر شد و دیگر پشتیبانی نمی شود. در صورت امکان ، شما همچنان باید سازگار کتابخانه خود با پایتون 3.6 و نسخه های جدیدتر باشید تا هرچه بیشتر افراد بتوانند در بهترین حالت از کتابخانه شما استفاده کنند .

کتابخانه های جدید

لیستی از جدید ترین کتاب خانه هایی که به پایتون اضافه شده اند :

  • zoneinfo
  • graphlib

کتابخانه های بهبود یافته

  • ast
  • asyncio
  • compileall
  • concurrent.futures
  • curses
  • datetime
  • distutils
  • fcntl
  • ftplib
  • gc
  • hashlib
  • http
  • imaplib
  • importlib
  • inspect
  • ipaddress
  • math
  • multiprocessing
  • nntplib
  • os
  • pathlib
  • pdb
  • poplib
  • pprint
  • pydoc
  • random
  • signal
  • smtplib
  • socket
  • time
  • sys
  • tracemalloc
  • typing
  • unicodedata
  • venv
  • xml

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

https://docs.python.org/3/whatsnew/3.9.html

نتیجه گیری !

انتشار نسخه جدید پایتون یک نقطه عطف بزرگ برای جامعه است. شاید بلافاصله نتوانید از ویژگی های جذاب جدید استفاده کنید ، اما در عرض چند سال پایتون 3.9 به اندازه امروز پایتون 3.6 گسترده خواهد شد.

در این آموزش ، ویژگی های جدیدی را مشاهده کرده اید مانند:

  • ماژول zoneinfo برای برخورد با مناطق زمانی
  • اپراتورهایی که می توانند دیکشنری ها را به روز کنند
  • حاشیه نویسی
  • زمان آپدیت های بعدی پایتون
  • جدید ترین PEP ها
  • پشتیبانی مناسب از منطقه زمانی
  • به روزرسانی ساده تر دیکشنری ها
  • تجزیه کننده قدرتمندتر ( درخت تجزیه )
  • حذف پیشوند و پسوند رشته ها
  • نوع اشاره یا TypeHint
  • بزرگترین مقسوم علیه مشترک (GCD) و حداقل چند برابر
  • کدهای وضعیت جدید HTTP
  • حذف کد های منسوخ شده
آبان ۱, ۱۳۹۹

۰ پاسخ به "پایتون 3.9 : ویژگی های جدید و جالب"

ارسال یک پیام

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

X