ویژگی های جدید پایتون 3.8
پایتون با به روی کارآمدن علم داده، محبوبترین زبان برنامهنویسی در سال 2019 بود. بسیاری از اشکال جدید عبارات در هر بروزرسانی در پایتون اضافه میشوند. پیگیری تغییرات در پایتون کار دشواری است. به همین دلیل در این مقاله، درباره موارد زیر که در نسخه جدید پایتون 3.8 آمده است، خواهید آموخت.
ویژگی های مهم پایتون سری 3.8 ، در مقایسه با 3.7
برخی از ویژگی های اصلی و تغییرات جدید در پایتون 3.8 عبارتند از:
PEP 572 ، عبارات واگذاری
PEP 570 ، استدلالات فقط مثبت
PEP 587 ، پیکربندی اولیه شروع پایتون (جاسازی بهتر)
PEP 590، Vectorcall: پروتکل سریع فراخوانی برای CPython
PEP 578 ، هوکهای ممیزی زمان اجرا
PEP 574 ، پروتکل Pickle 5 با دادههای خارج از باند
PEP 591 (Final qualifier) ، PEP 586 (تایپهای لفظی) و PEP 589 (typedDict)
حافظه کش فایل سیستم موازی، برای بارکد کامپایل شده
به اشتراکگذاری دیباگ ABI به عنوان نسخه ساخت
رشتههای f از مشخصههای مفید برای اشکالزدایی پشتیبانی میکنند.
استفاده از continue در انتها امکانپذیر است: بلوکها
در ویندوز، حلقه رویداد پیش فرض asyncio اکنون ProactorEventLoop است
در macOS ، روش شروع spawn اکنون به طور پیشفرض در multiprocessing استفاده میشود
multiprocessing اکنون میتواند از بخشهای حافظه مشترک استفاده کند تا از هزینههای Pickle بین فرآیندها جلوگیری شود
typed_ast دوباره با CPython ادغام شده است.
اکنون Load-Global، چهل درصد سریعتر است.
Pickle به طور پیشفرض از پروتکل 4 استفاده میکند و عملکرد را بهبود میبخشد
به جز چند مورد استثنا، پایتون 3.8 حاوی پیشرفتهای بسیار کمی نسبت به نسخههای قبلی است.
اپراتور walrus
بزرگترین تغییر در پایتون 3.8 معرفی عباربرات انتسابی است. آنها با استفاده از یک نشان جدید (: =) نوشته شدهاند. این عملگر به عنوان اپراتور walrus شناخته میشود.
عبارات اختصاصی به شما امکان میدهند یک مقدار را در همان عبارت اختصاص دهید و برگردانید. به عنوان مثال، اگر میخواهید مقداری را به یک متغیر اختصاص دهید و مقدار آن را چاپ کنید، معمولاً کاری شبیه به این انجام میدهید:
>>> walrus = False
>>> print(walrus)
False
در پایتون 3.8، شما مجاز به ترکیب این دو جمله داخل یک جمله، با استفاده از اپراتور walrus هستید:
>>> print(walrus := True)
True
عبارت واگذاری به شما امکان میدهد True را به walrus اختصاص دهید و بلافاصله مقدار را چاپ کنید. اما بخاطر داشته باشید که اپراتور walrus کار خاصی را انجام نمیدهد که بدون آن امکانپذیر نباشد. walrus فقط ساختارهای خاص را راحتتر میکند و گاه میتوانید براحتی در کد خود ارتباط ایجاد کنید.
الگویی که برخی از نقاط قوت اپراتور walrus را نشان میدهد، حلقههایی است که در آن باید متغیر را بروزرسانی کنید.
به عنوان مثال، کد زیر از کاربر ورودی درخواست میکند
inputs = list()
current = input(“Write something: “)
while current != “quit”:
inputs.append(current)
current = input(“Write something: “)
انواع استدلال
پارامترهای هر تابع پایتون میتوانند دو نوع آرگومان را بپذیرند.
آرگومانهای موضعی
آرگومانهای کلمات کلیدی که توسط کلمات کلیدی تهیه میشوند
در مثال زیر ، مقادیر هر دو پارامتر a و b با آرگومانهای موقعیتی یا کلمات کلیدی قابل تهیه است.
:def my_func(a, b=1)
return a+bmy_func(5,2) # both positional arguments
my_func(a=5,b=2) # both keyword arguments
نسخه جدید Python روشی را برای مشخص کردن پارامترهایی ارائه میدهد که فقط میتوانند آرگومان موقعیت یا کلمه کلیدی را با استفاده از syntax و separation نشان دهند.در مثال زیر ، دو پارامتر a و b فقط دارای موقعیت هستند، c و d میانی میتوانند آرگومان موقعیتی یا کلمه کلیدی باشند و e و f آخر نیز فقط کلمه کلیدی هستند.
def my_func(a, b, /, c, d, *, e, f):
return a+b+c+d+e+f
my_func(1,2,3,4,5,6) # invalid as e and f are keyword-only
my_func(a=1,b=2,3,4,e=5,f=6) # invalid as a and b are position-only
my_func(1,2,3,d=4,e=5,f=6) # returns 21
my_func(1,2,c=3,d=4,e=5,f=6) # returns 21
f-string 2.0 – debugging
f-string پایتون یک game-changer است. این یک فرمت رشته قابل خواندن است که عبارات را در داخل رشتهها تعبیه میکند. برنامهنویسان پایتون اغلب از debugging برای “printf- style” استفاده میکنند.
در به روز رسانی جدید با استفاده از علامت برابر = به عنوان یک مشخصکننده قالب در عبارات داخل رشتههای f با f ‘{expr =} ، امکانپذیر است. رشته خروجی نام متغیر و مقدار آن را شامل میشود
print "foo=", foo, "bar=", bar
f-strings این موضوع را کمی بهتر نشان میدهند:
print(f"foo={foo} bar={bar}")
The = specifie به عنوان f ‘{expr =}’ استفاده میشود و براحتی میتوانید عبارت زیر را بنویسید:
print(f"{foo=} {bar=}")
یک قدم کوچک برای زبان برنامهنویسی، اما یک جهش بزرگ برای همه کسانی که اصطلاح print() را برای debugging استفاه میکنند.
ما اغلب میخواهیم مقادیر متغیرها را برای اسناد یا debugging چاپ کنیم. بنابراین با حداقل تلاش، امکان debugging آسان فراهم میشود.
فرهنگ لغت برگشتپذیر
در پایتون 3.7 ، دیکشنریها ترتیب درج کلیدها را حفظ میکنند. اکنون reversed() built-in میتواند برای دسترسی به دیکشنری در reverse order of insertion مانند OrderedDict استفاده شود.
ماژولهای جدید ابرداده (Metadata)
یک ماژول importlib.metadata جدید وجود دارد که به شما امکان میدهد متاداده را از بستههای third-party بخوانید. میتوانید شماره نسخه بستهها را در اسکریپتهای خود استخراج کنید.
خطاهای Syntax جدید
مترجم پایتون در بعضی موارد SyntaxWarning را، وقتی یک کاما قبل از tuple یا لیست از دست رفته است؛ حذف میکند. بنابراین وقتی به طور اتفاقی این کار را انجام دهید:
data = [
(1, 2, 3) # oops, missing comma!
(4, 5, 6)
]
به جای نشان دادن TypeError: 'tuple' object is not callable
که به شما نمیگوید چه اشتباهی رخ داده است. فقط هشداری میدهد که نشان میدهد که احتمالاً یک کاما را قرار ندادهاید. کامپایلر در این نسخه پایتون، SyntaxWarning را با انواع خاصی از ادبیات (به عنوان مثال رشتهها، اعداد صحیح و غیره) بیان میکند.
ادامه (continue)
در گذشته استفاده از اظهارات continue در بند آخر به دلیل مشکلی اجرای آن غیرقانونی بوده است. دیگر این مشکل در نسخه جدید پایتون وجود ندارد.
for i in range(2):
print(‘A sentence.’)
print(‘This never shows.’)
# Python <= 3.7
>>SyntaxError: ‘continue’ not supported inside ‘finally’ clause
>> 0
A sentence.
توجه داشته باشید که برخی از ویژگیهای پیشرفته که ارتباط چندانی با نحوه برنامهنویسی عادی، نگارش کدها برای پروژههای کوچک ندارد، اشاره نکردیم. آنها شامل حافظه multiprocessing، پروتکل Pickle جدید و غیره برای افراد علاقمند میباشند. در این مقاله 6 ویژگی جدید پایتون که حتی مبتدیان پایتون نیز میتوانند از آن بهرهمند شوند، بیان شده است. قبل از استفاده از پایتون 3.8، مطمئن باشید که با برخی از ویژگیهای اساسی پایتون آشنا هستید.