۳۰ ترفند مهم و مفید پایتون – به زبان ساده


در این مطلب به بررسی 30 ترفند مهم و مفید پایتون میپردازیم که در موارد مختلف به اجرای آسانتر کارها در پایتون کمک میکند. با ما تا انتهای این فهرست همراه باشید.
1. از پایتون 3 استفاده کنید
از ابتدای سال 2020 میلادی، پایتون 2 دیگر پشتیبانی رسمی نمیشود. همه مثالهایی که در این مطلب بررسی میشوند مربوط به پایتون 3 هستند. اگر هنوز از پایتون نسخه 2.7 استفاده میکنید، پیشنهاد میکنیم همین الان به پایتون 3 ارتقا دهید. اگر از مک استفاده میکنید میتوانید از Homebrew برای ارتقای بیدردسر پایتون بهره بگیرید.
2. بررسی کمترین نسخه مورد نیاز پایتون
در کدهای خود میتوانید کمترین نسخه پایتون را تعیین کنید تا مطمئن شوید که کاربران اسکریپت شما را با نسخه ناسازگاری از پایتون اجرا نمیکنند. بدین منظور از بررسی ساده زیر استفاده کنید:
3. از IPython استفاده کنید
IPython (+) اساساً یک پوسته بهبود یافته است. عمده اهمیت آن به جهت تکمیل خودکار است؛ اما امکانات دیگری نیز دارد. برای نمونه برخی دستورهای جالب داخلی دارد که در ادامه به برخی از آنها اشاره میکنیم:
- cd% – برای تغییر دایرکتوری کاری جاری
- edit% – برای باز کردن یک ادیتور و اجرای کد وارد شده پس از بستن ادیتور
- env% – برای نمایش متغیرهای محیطی جاری
- pip install [pkgs]% – برای نصب پکیجها بدون ترک پوسته تعاملی
- time% و timeit% – برای زمانبندی اجرای کد پایتون
برای مشاهده فهرست کامل به این آدرس (+) بروید.
قابلیت مفید دیگر IPython ارجاع به خروجی دستور قبلی است. In و Out اشیای واقعی هستند. میتوانید از آنها برای استفاده از خروجی سوم به صورت Out[3] بهره بگیرید. IPython را با دستور زیر نصب کنید:
pip3 install ipython
4. خلاصه لیست
«خلاصه لیست» (List Comprehensions) میتواند جایگزین حلقههای زشت for شود که برای پر کردن لیستها استفاده میشوند. ساختار مقدماتی یک خلاصه لیست به صورت زیر است:
[expression for item in list if conditional]
در ادامه مثال کاملاً سادهای از پر کردن یک لیست با استفاده از یک دنباله از اعداد را میبینید:
از آنجا که میتوانید از یک عبارت استفاده کنید، میتوانید محاسباتی نیز روی آن اجرا کنید:
حتی میتوانید یک تابع بیرونی را فراخوانی کنید:
در نهایت میتوانید از if برای فیلتر کردن لیست استفاده کنید. در این مثال تنها مقادیری را نگه میداریم که بر 2 بخشپذیر باشند:
5. بررسی مصرف حافظه اشیا
با استفاده از ()sys.getsizeof میتوان وضعیت مصرف حافظه از سوی اشیای مختلف را بررسی کرد:
همان طور که میبینید لیست فوق تنها 48 بایت مصرف حافظه دارد. دلیل این مسئله آن است که تابع range یک کلاس بازگشت میدهد که مانند یک لیست رفتار میکند. از این رو range بسیار بهینهتر از استفاده از لیست واقعی از اعداد است. میتوانید با استفاده از یک خلاصه لیست، یک لیست واقعی از روی همان range ایجاد و نتیجه را مقایسه کنید:
6. بازگشت مقادیر چندگانه
تابعها در پایتون میتوانند بدون نیاز به یک دیکشنری، لیست یا کلاس بیش از یک متغیر را بازگشت دهند. طرز کار آن چنین است:
این موضوع در مورد تعداد محدودی از مقادیر بازگشتی مصداق دارد. اما هر چیزی که از 3 مقدار تجاوز کند باید در یک کلاس (داده) قرار گیرد.
7. استفاده از کلاسهای داده
از نسخه 3.7 پایتون به بعد، مفهومی به نام کلاسهای داده ارائه شده است. کلاس داده چندین مزیت نسبت به کلاسهای معمولی یا دیگر جایگزینها مانند بازگشت مقادیر چندگانه یا دیکشنری دارد:
- کلاس داده کمترین مقدار کد را لازم دارد.
- میتوان کلاسهای داده را مقایسه کرد زیرا __eq__ پیادهسازی شده است.
- میتوانید به سهولت کلاس را به منظور دیباگ کردن پرینت کنید، زیرا __repr__ نیز پیادهسازی شده است.
- کلاسهای داده نیازمند «سرنخ نوع» (type hints) هستند که احتمال بروز باگ را کاهش میدهد.
در ادامه مثالی از طرز کار یک کلاس داده را میبینید:
8. تعویض درجای متغیر
ترفند جالب زیر موجب میشود که چندین خط کد صرفهجویی کنید:
9. ادغام دیکشنریها (پایتون 3.5 به بالا)
از پایتون 3.5 به بعد ادغام دیکشنریها آسانتر شده است:
در صورتی که برخی کلیدها همپوشانی داشته باشند، کلیدهای دیکشنری نخست بازنویسی میشوند.
10. مرتبسازی حالت عنوان
این نیز یکی از ترفندهای مفید پایتون محسوب میشود:
11. افراز یک رشته به یک لیست
امکان افراز یک رشته به یک لیست از رشتهها وجود دارد. در مثال زیر از کاراکتر space برای افراز رشته استفاده میکنیم:
برای افراز روی فضاهای خالی میتوانید به spilt هیچ آرگومانی ندهید. به صورت پیشفرض همه موارد پشت سرهم فضای خالی به عنوان یک فضای خالی منفرد محسوب میشوند. بنابراین استفاده از ()mystring.split نتیجه مشابهی دارد.
12. ایجاد یک رشته از لیستی از رشتهها
این ترفند عکس ترفند قبلی است. این بار یک رشته را از روی لیستی از رشتهها ایجاد میکنیم و بین آنها یک کاراکتر فاصله قرار میدهیم:
دلیل این که از (" ")mylist.join استفاده نکردیم این است که تابع ()String.join میتواند نهتنها لیستها بلکه هر شیء تکرارپذیر (iterable) را به هم الحاق کند. قرار دادن آن درون رشته از پیادهسازی کارکرد مشابه در موارد مختلف جلوگیری میکند.
13. ایموجی
این ترفند بیشتر در زمان تحلیل شبکههای اجتماعی به کار میآید. ابتدا ماژول ایموجی را با دستور زیر نصب کنید:
pip3 install emoji
زمانی که نصب شد میتوانید به صورت زیر عمل کنید:
برای کسب اطلاعات بیشتر و مشاهده مثالها و مستندات به این صفحه (+) مراجعه کنید.
14. برش دادن یک لیست
ساختار مقدماتی برش دادن به صورت زیر است:
a[start:stop:step]
Start ،Stop و Step اختیاری هستند. اگر آنها را پر نکنید مقادیر پیشفرضشان به صورت زیر است:
- 0 برای start
- انتهای رشته برای end
- 1 برای step
به مثال زیر توجه کنید:
15. معکوس کردن رشتهها و لیستها
میتوان از نماد slice که در بخش قبلی توضیح دادیم برای معکوس کردن یک رشته یا لیست استفاده کرد. با استفاده از مقدار گام منفی 1- عناصر معکوس میشوند:
16. نمایش بچه گربهها
در این ترفند بهانهای به دست آوردهایم تا بالاخره تصویری از بچهگربهها نمایش دهیم. البته با استفاده از این ترفند میتوانید گرافها و نمودارها را نیز نمایش دهید. ابتدا Pillow (+) را نصب کنید که یک فورک از کتابخانه تصویر پایتون محسوب میشود:
pip3 install Pillow
سپس تصویر زیر را در فایلی به نام kittens.jpg دانلود کنید:
اینک میتوانید با استفاده از کد زیر تصویر را از کد پایتون نمایش دهید:
همچنین میتوانید این کار را مستقیماً از IPython انجام دهید:
Pillow میتواند کارهای بسیار بیشتری از نمایش تصاویر انجام دهد. با استفاده از آن میتوان تصاویر را تحلیل کرد، اندازه آنها را تغییر داد، آنها را فیلتر کرد، بهبود بخشید و موارد مختلفی روی آنها اجرا نمود. برای دیدن همه قابلیتهای آن به مستنداتش (+) مراجعه کنید.
17. از ()map استفاده کنید
یکی از تابعهای داخلی پایتون ()map نام دارد. ساختار آن چنین است:
map(function, something_iterable)
بنابراین باید تابعی برای اجرا به آن بدهیم و سپس شیئی ارسال کنیم که با تابع اجرا کند. این شیء میتواند هر شیء تکرارپذیر باشد. در مثال زیر از یک لیست استفاده کردهایم:
کد فوق را بررسی کنید و به جای لیست از یک ()map استفاده کنید.
18. دریافت عناصر یکتا از لیست یا رشته
با ایجاد یک مجموعه به وسیله تابع ()set میتوانید همه عناصر یکتا را از یک لیست یا شیء شبه لیست به دست آورید:
19. یافتن مقدار دارای بیشترین فراوانی
برای یافتن مقداری با بیشترین فراوانی در یک لیست یا رشته میتوانید به صورت زیر عمل کنید:
در کد فوق:
- ()Max بزرگترین مقدار لیست را بازگشت میدهد. آرگومان key یک تابع آرگومان منفرد برای سفارشیسازی ترتیب مرتبسازی میگیرد که در این مورد test.count است. این تابع روی هر آیتم تکرارپذیر اعمال میشود.
- test.count یک تابع داخلی لیست است. یک آرگومان میگیرد و تعداد رخدادهای آرگومان را میشمارد. بنابراین test.count(1) مقدار 0 و test.count(1) مقدار 4 بازگشت میدهد.
- Set(test) همه مقادیر یکتای تست را بازگشت میدهد که برابر با {1, 2, 3, 4} است.
از این رو در یک خط منفرد از کد همه مقادیر یکتای تست را به دست آوردیم که برابر با {1, 2, 3, 4} است. سپس max تابع list.count را روی آنها اعمال میکند و مقدار بیشینه را بازگشت میدهد.
20. ایجاد نوار پیشروی
هر کسی میتواند نوار پیشروی خاص خود را بسازد که کار جذابی محسوب میشود. اما استفاده از پکیج progress موجب سهولت کار میشود:
pip3 install progress
اکنون میتوانید یک نوار پیشروی را با کمترین تلاش ایجاد کنید:
انیمیشن زیر همه انواع نوارهای پیشروی را نمایش میدهد:
21. استفاده از _ در یک پوسته تعاملی
در IPython میتوانیم نتیجه آخرین عبارت را با عملگر زیرخط (_) به صورت زیر به دست آوریم:
In [1]: 3 * 3 Out[1]: 9 In [2]: _ + 3 Out[2]: 12
کد فوق در پوسته پایتون نیز کار میکند. به علاوه پوسته IPython امکان استفاده از out[n] برای به دست آوردن مقدار In[n] را نیز فراهم میسازد. مثلاً out[1] در مثال فوق مقدار 9 را به دست میدهد.
22. ایجاد سریع وب سرور
با استفاده از دستور زیر میتوانید به سرعت یک وب سرور ایجاد کرده و محتوای دایرکتوری جاری را روی آن عرضه کنید:
python3 -m http.server
این دستور در موادی مفید است که بخواهید برخی موارد را با همکار خود به اشتراک بگذارید و یا بخواهید یک سایت HTML ساده را تست کنید.
23. رشتههای چندخطی
با این که امکان استفاده از گیومههای سهتایی برای قرار دادن رشتههای چندخطی در کد وجود دارد، اما روش مناسبی محسوب نمیشود. هر چیزی که بین گیومههای سهتایی قرار گیرد به رشته تبدیل میشود و این وضعیت شامل قالببندی نیز میشود.
روش دیگر که ترجیح بیشتری دارد این است که چند خط را با هم الحاق کنیم تا امکان قالببندی مناسب کد فراهم شود. تنها عیب این روش آن است که باید آن را صراحتاً در خط جدید قرار دهید:
24. عملگر سهتایی برای انتساب شرطی
این هم یکی از روشهای منسجمتر ساختن کد در عین حفظ خوانایی است:
[on_true] if [expression] else [on_false]
به مثال زیر توجه کنید:
x = "Success!" if (y == 2) else "Failed!"
25. شمارش رخدادها
میتوانید از Counter از کتابخانه collections برای به دست آوردن شماره همه عناصر یکتا در یک لیست استفاده کنید.
26. زنجیرهسازی عملگرهای مقایسه
از عملگرهای مقایسه در پایتون میتوان برای ایجاد کدهای خواناتر و فشردهتر بهره گرفت:
27. افزودن رنگ بیشتر
با استفاده از Colorama (+) میتوان مقداری رنگ بیشتر به ترمینال بخشید:
28. کار با تاریخ
ماژول python-dateutil (+) اکستنشنهای قدرتمندی برای ماژول تاریخ و زمان استاندارد ارائه میکند. آن را به صورت زیر نصب کنید:
pip3 install python-dateutil
با استفاده از این کتابخانه کارهای جالب زیادی میتوان انجام داد. ما صرفاً یک مثال را معرفی میکنیم که به طور خاص مفید است: در این مثال تاریخها را از فایلهای لاگ و نظایر آن به صورت فازی تحلیل میکنیم:
صرفاً به خاطر داشته باشید که وقتی کارکرد datetime استاندارد پایتون جواب نمیدهد، میتوانید از ماژول python-dateutil استفاده کنید.
29. تقسیم صحیح
در پایتون 2 عملگر تقسیم (/) به صورت پیشفرض تقسیم صحیح انجام میدهد، مگر این که یکی از عملوندهای آن عدد اعشاری باشد. بنابراین رفتاری مانند زیر دارد:
# Python 2 5 / 2 = 2 5 / 2.0 = 2.5
در پایتون 3 عملگر تقسیم به صورت پیشفرض تقسیم اعشاری انجام میدهد و عملگر // به عملگر تقسیم صحیح اختصاص یافته است. بنابراین وضعیت زیر برقرار است:
Python 3 5 / 2 = 2.5 5 // 2 = 2
برای این که با انگیزه این تغییر به صورت کامل آشنا شوید به این آدرس (+) بروید.
30. تشخیص charset با chardet
میتوان از ماژول chardet برای تشخیص charset یک فایل استفاده کرد. این ماژول در مواردی که بخواهیم فایلهای بزرگی از متن تصادفی را تحلیل کنیم بسیار به کار میآید. آن را به صورت زیر نصب کنید:
pip install chardet
اکنون یک ابزار خط فرمان اضافی دارید که chardetect نام دارد و به صورت زیر مورد استفاده قرار میگیرد:
chardetect somefile.txt somefile.txt: ascii with confidence 1.0
همچنین میتوانید از این کتابخانه به صورت برنامهنویسی شده استفاده کنید.
سخن پایانی
به این ترتیب به پایان این فهرست کاربردی با موضوع معرفی 30 ترفند مفید و مهم پایتون رسیدیم. امیدواریم از مطالعه این مطلب بهرهمند شده باشید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون Python
- مجموعه آموزشهای برنامهنویسی
- آموزش برنامه نویسی Python (پایتون) – مقدماتی
- زبان برنامه نویسی پایتون (Python) — از صفر تا صد
- پایتون چیست — راهنمای جامع
==