سلام مجتبی هستم و با یه موضوع تقریباً داغ اومدم. بلاخره پایتون 3.9 از راه رسید اگرچه نسخه های بتا مدتی بود که در دسترس بودن اما نسخه رسمی توی 5 اکتبر 2020 بلاخره منتشر شد. و ما می خوایم یه نگاهی بندازیم به چندتا از قابلیتهای جدیدی که بهش اضافه شده. هر نسخه پایتون شامل ویژگی های جدید بهبود یافته و منسوخ شده است و پایتون 3.9 هم تفاوتی نداره. سعی می کنم توی این مطلب، جالب ترین تغییرات به وجود اومده رو بیان کنم امیدوارم چیزی رو جا نندازم.
توی این مطلب درمورد مطالب زیر یاد می گیرید:
* دسترسی و محاسبه مناطق زمانی
* ترکیب کردن و بروز رسانی دیکشنری ها
* استفاده از دکوراتور ها مبتنی بر expressions
* استفاده کردن از type hint ،annotations
برای اینکه خودتون ویژگیهای جدید رو امتحان کنید باید python 3.9 رو نصب کنید. می تونید از این لینک بهش دسترسی داشته باشین.
پایتون پشتیبانی گسترده ای برای کار با تاریخ و زمان از طریق ماژول datetime در کتابخانه استاندارد داره. با این وجود، پشتیبانی و کار با مناطق زمانی تا حدودی کمبود داشت و روش پیشنهادی برای کار با مناطق زمانی استفاده از کتابخانههای خارجی مثل dateutil , pytz بود.
بزرگترین چالش کار با مناطق زمانی در پایتون این بود که شما مجبور بودین خودتون قوانین مناطق زمانی را اجرا کنید.
با استفاده از UTC time stamp از کتابخانه datetime میتونید این کار رو بکنید.
توجه کنید که این محاسبه زمان یک time zone aware رو به دست میاره یعنی با استفاده از tzinfo منطقه زمانی رو نگه می داره یا به اصطلاح آگاه از منطقه زمانی هست. محاسبه های زمانی که این ویژگی رو ندارن naive نامیده میشن یعنی منطقه زمانی رو نمی دونن.
Paul Ganssle که برای سال ها نگه دارنده کتابخانه dateutil بود در سال 2019 به تیم توسعه دهندگان پایتون پیوست تا کمک کنه zoneinfo رو به کتابخانه استاندارد پایتون اضافه کنه تا کار با مناطق زمانی ساده بشه.
zoneinfo امکان دسترسی به پایگاه داده مناطق زمانی “Internet Assigned Numbers Authority (IANA)” رو فراهم می کنه. IANA هرساله چندین بار پایگاه داده خودش رو بروز می کنه و یکی از معتبر ترین منابع برای اطلاعات منطقه زمانی است.
با استفاده از zoneinfo می تونید اطلاعات مربوط به منطقه زمانی رو بدست بیارید.
با استفاده از key می تونید به منطقه زمانی دسترسی پیدا کنید که توی این مورد خاص America/Vancouver هست.
نکته: zoneinfo از یک پایگاه داده منطقه زمانی IANA که در کامپیوتر شما قرار داره استفاده می کنه. ممکن است - به ویژه در ویندوز - چنین پایگاه داده ای نداشته باشید یا zoneinfo قادر به پیدا کردن آن نباشه. اگر مانند خطای زیر خطایی دریافت کردید، zoneinfo نتونسته یک پایگاه داده منطقه زمانی را پیدا کنه:
می تونید این مشکل رو با نصب tzdata حل کنید.
بروز رسانی سادهتر دیکشنری ها
دیکشنری یک نوع داده اصلی در زبان پایتون هست که خیلی هم زیاد ازش استفاده میشه (پایتون خیلی از دیکشنری خوشش میاد). روشهای مختلفی وجود داره که دوتا دیکشنری رو با هم ترکیب کنیم با این حال به نظر کمی شلوغ و گیجکننده هست.
در کد بالا با دو روش مختلف دیکشنری ها رو ادغام کردیم بدون اینکه دادههای اصلی رو دستکاری کنیم. توجه کنید که Edinburgh به جای cleveland قرار می گیره چون کلید های مشابه دارن (2018) و نمیشه دوتا کلید تکراری داشته باشیم. هم چنین می تونیم به شکل in place بروزرسانی کنیم.
این روش دیکشنری اصلی رو تغییر میده.
بر اساس PEP 584 پایتون 3.9 دو اپراتور جدید برای دیکشنری ها دارد. Union ( | ) و in-place union ( =| ) می تونیم از | برای ترکیب دو دیکشنری استفاده کنیم و از =| هم برا بروز رسانی دیکشنری به شکل in-place [خیلی بخوام بیکلاس توضیح بدم in-place چیه یعنی کار رو انجام بده جواب رو بریز توی همون متغیر اولی]
دکوراتور های انعطاف پذیرتر
به طور معمول یک دکوراتور باید یک شی قابل نام گذاری باشد معمولاً یک تابع یا یک کلاس، طبق PEP 614 دکوراتور ها می تونن هر دستور قابل فراخوانی باشن. البته نحوه قدیمی استفاده از دکوراتور ها چندان محدود کننده نیست و این ویژگی جدید طبق چیزی که در PEP گفته شده برای پاسخ (callback) در فریم ورک های GUI هست.
PyQT از signal و slot برای اتصال ویجت ها با پاسخ مورد نظر استفاده می کنه. از لحاظ مفهومی می تونید کاری شبیه به اون چه که انجام میدم رو بکنید تا سیگنال clicked رو به دکمه متصل کنید و در ازای اون تابع say_hello رو اجرا کنید.
نکته: این یه برنامه کامل نیست و اجرا کردنش منجر به خطا میشه، صرفاً یه تیکه کد برای نشون دادن چطور استفاده کردن از دکوراتور هست.
حالا تصور کنید که چندتا دکمه داریم و اونها رو داخل یک دیکشنری نگه داری می کنیم.
اگر بخوایید از دکوراتور برای اتصال این دکمه ها استفاده کنید. توی نسخه های قدیمی پایتون یک چالش وجود داشت که نمی شد با استفاده از [ ] که برای دسترسی به ایتم های دیکشنری هست عمل کرد و دکوراتور رو روی اون اعمال کرد. باید به شکل زیرعمل می کردیم.
اما حالا توی python 3.9 این محدودیت وجود نداره و هر عبارتی می تونه به دکوراتور تحویل داده بشه. حالا می تونیم این جوری بنویسیم.
Annotate Type Hints
نوشتن راهنما یا حاشیه نویسی برای توابع که در PEP 3107 معرفی شد امکان افزودن فرا داده (metadata) رو برای توابع می داد. شبیه مثال زیر:
توی این مثال annotation فقط به عنوان یک راهنما برای کسایی که کد رو می خونن عمل می کنه. اما طبق PEP 484 پیشنهاد شد که از این قابلیت برای اشاره به نوع داده (type hint) استفاده بشه. حالا در پایتون 3.9 طبق PEP 593 می تونید از annotated استفاده کنید که type hint رو هم زمان باهاش به کار ببرید. یعنی هم به نوع داده اشاره می کنید و هم میشه توضیح داد که اون داده قراره چی کار کنه. مثال بالا رو الان میشه اینجوری نوشت.
توی مثال بالا annotated دوتا ورودی میگیره اولی جنس داده ورودی برای type hint و دومی هم توضیح درمورد اون داده. از دید type checker (در پایتون نوع دادهها رو چک می کنه) عبارت distance: Annotated[float, ‘feet’] یک داده از نوع float هست و اصلاً کاری هم با قسمت توضیحات نداره.
حذف پیشوند و پسوند در رشته ها
در پایتون 3.9 دو متد جدید برای رشتهها داریم removesuffix , removeprefix این دو متد می تونن پیشوند ها و پسوند ها رو از یک رشته حذف کنن و استفاده کردن ازشون خیلی راحتتر و کم دردسرتر از متد strip هست
اگه پیشوند یا پسوند داده شده با رشته مطابقت نداشته باشه خود رشته رو دست نخورده برمی گردونه و این که فقط یک بار عمل حذف رو انجام میده اونم روی اولین موردی که پیدا کنه، اگه بخواین همه موارد رو حذف کنه باید از حلقه while استفاده کنید.
برای بیشتر خوندن درمورد این متد میتونید PEP 616 رو مطالعه کنید.
استفاده از راهنمای نوع داده برای دیکشنری و لیست به طور مستقیم
شاید خیلی ازش استفاده نکنید یا اصلاً مهم به نظر نیاد اما به طور معمول می شد برای انواع پایهای مثل int, str, bool عملیات annotate رو انجام داد و براشون type hint کذاشت همین طور برای انواع داده هایی که خودمون ایجاد می کنیم. مثال زیر رو ببینید:
اما به دلایل فنی نمی شد این کار رو برای لیست و دیکشنری انجام داد و باید از ماژول typing اون نوع داده خاص رو import می کردیم تا بتونیم این کار رو انجام بدیم.
اما حالا توی پایتون 3.9 دیگه نیازی به این کار نیست و میشه مستقیم از خود list برای این کار استفاده کرد.
این باعث میشه که کد نویسی سادهتر بشه و خوانایی برنامه هم بالا میره.
ب م م ، ک م م :
اخ که چقدر من سر حل کردن این سؤال تو دوران تحصیل فسفر سوزوندم. پایتون از خیلی قبل تر ها تابعی برای محاسبه ب م م داشت به اسم gcd که به شکل زیر عمل می کرد:
به همین سادگی ب م م بین دوتا عدد یا هر چندتا که بهش بدین رو حساب می کنه اما قبلاً برای محاسبه ک م م باید خودمون برنامه می نوشتیم و از اونجا که ک م م رو میشه از روی ب م م به دست آورد برنامش به شکل زیر می شد:
حالا پایتون کار رو راحتتر کرده و این برنامه رو هم خودش پیاده کرده و گذاشته داخل تابعی به اسم lcm و میشه به شکل زیر ازش استفاده کرد:
خوش به حالمون شد حالا میشه با دوخط کد هم ب م م رو حساب کرد هم ک م م رو
HTTP Status کدهای جدید
IANA که قبل تر دربارش حرف زدم و گفتم دیتابیس مناطق زمانی رو نگه داری می کنه، هم چنین منبعی برای http status code ها هست پایتون کدهای http رو توی کتابخانه استاندارد http نگه داری می کنه.
حالا توی پایتون 3.9 این کتابخونه هم بروز شده و کدهای 103 (Early Hints , 425 (Too Early) بهش اضافه شده:
خداحافظ پایتون 2
یک نقطه عطف مهم برای پایتون در سال 2020 اتفاق افتاد. پایتون 2.7 برای اولین بار در سال 2010 منتشر شد و در 1 ژانویه 2020 پشتیبانی رسمی از اون تموم شد. پایتون 2 نزدیک به 20 سال به خوبی به جامعه برنامه نویسان خدمت کرد و اکثراً به خوبی از اون یاد میکنن اما فارغ از عدم سازگاری کدهای پایتون 3 با پایتون 2 این تغییر باعث شده که توابعی زیادی که برای برخی سازگاری ها با نسخه قدیمی نگه داشته می شدن حالا توی پایتون 3.9 دیگه نباشن و چندتا دیگه هم قراره توی پایتون 3.10 حذف بشن و حالا این تغییر بزرگ به تیم توسعه پایتون امکان تمرکز بیشتر روی پایتون 3 رو میده و می تونه نویدبخش آیندهای هیجان انگیز تر و تکنولوژیک تر برای پایتون 3 باشه برای اطلاع کامل از اینکه چه ویژگیهایی حذف شدن و چه چیزهایی اضافه شدن می تونید مقاله اصلی تیم توسعه پایتون رو بخونید.
نتیجه: یه نفر یه حرف خوبی میزد، می گفت: “انتشار نسخه جدید پایتون یه نقطه عطف بزرگ برای جامعه خودش هست شاید بلافاصله نتونید از همه ویژگیهای جدید استفاده کنید یا حتی خیلیها رو درست درک نکنید و به نظر مهم نباشن اما چند سال دیگه پایتون 3.9 به اندازه الان پایتون 3.6 گسترده میشه” خلاصه ما که دوسش داریم اکثر این ویژگیهای جدید هم نوید برنامه نویسی سادهتر با داشتن امکانات بیشتر رو میده.
وجود هر قابلیتی در یک زبان برنامه نویسی صرفاً یک ویژگی هست، این که برای شما تبدیل به یک نقطه ضعف بشه یا نقطه قوت فقط و فقط بستگی به استفادهای داره که شما ازش می کنید. پس ویژگیهای جدید رو بشناسید و ازش به نفع خودتون استفاده کنید.
یک نقطه عطف مهم برای پایتون در سال 2020 اتفاق افتاد. پایتون 2.7 برای اولین بار در سال 2010 منتشر شد و در 1 ژانویه 2020 پستیبانی رسمی از اون تموم شد. پایتون 2 نزدیک به 20 سال به خوب...
توزیع لینوکس یا در حقیقت توزیع گنو/لینوکس (در حالت عامیانه بین بیشتر مردم گنو/لینوکس به عنوان لینوکس شناخته میشه که البته اشتباه هستش چون لینوکس فقط بخشی از سیستم عام...
دقیقاً در نقطه مقابل نوع استاتیک قرار میگیره یعنی زبانهایی که از این نوع استفاده میکنن نوع داده متغییر ها رو در هنگام اجرا بررسی میکنن یا به قول خارجی ها “check on the fly...
درواقع توسعه دهندهای گرامی اومدن دوباره یک کامپایلر مخصوص برای پایتون میکرو کنترلی ساختن و همچنین یک اجرا کنند و … که خیلی کار سختیه و کار هر کسی نیست! ولی همین کار...
بررسی ویژگی ها و مزیت ها و جزییات این زبان از حوصله این مقاله خارج هست و در این مقاله من فقط به 5 کاربرد پایتون در تکنولوژی اشاره میکنم ولی اگه علاقمند هستید که بیشتر د...
خروجی ها تو پایتون با امکانت زیادی رو به رو هستن شامل فونت مناسب، پشتیبانی از زبانهای فراوان نظیر فارسی و انگلیسی و همچنین پشتیبانی از رنگهای مختلف....