ترفند کاربردی برای کدنویسی بهینه در پایتون

در این مطلب به بررسی 30 ترفند مهم و مفید پایتون می‌پردازیم که در موارد مختلف به اجرای آسان‌تر کارها در پایتون کمک می‌کند. با ما تا انتهای این فهرست همراه باشید.

  1. از پایتون 3 استفاده کنید

از ابتدای سال 2020 میلادی، پایتون 2 دیگر پشتیبانی رسمی نمی‌شود. همه مثال‌هایی که در این مطلب بررسی می‌شوند مربوط به پایتون 3 هستند. اگر هنوز از پایتون نسخه 2.7 استفاده می‌کنید، پیشنهاد می‌کنیم همین الان به پایتون 3 ارتقا دهید. اگر از مک استفاده می‌کنید می‌توانید از Homebrew برای ارتقای بی‌دردسر پایتون بهره بگیرید.

  1. بررسی کمترین نسخه مورد نیاز پایتون

در کدهای خود می‌توانید کمترین نسخه پایتون را تعیین کنید تا مطمئن شوید که کاربران اسکریپت شما را با نسخه ناسازگاری از پایتون اجرا نمی‌کنند. بدین منظور از بررسی ساده زیر استفاده کنید:

  1. از IPython استفاده کنید

IPython () اساساً یک پوسته بهبود یافته است. عمده اهمیت آن به جهت تکمیل خودکار است؛ اما امکانات دیگری نیز دارد. برای نمونه برخی دستورهای جالب داخلی دارد که در ادامه به برخی از آن‌ها اشاره می‌کنیم:

  • cd% – برای تغییر دایرکتوری کاری جاری
  • edit% – برای باز کردن یک ادیتور و اجرای کد وارد شده پس از بستن ادیتور
  • env% – برای نمایش متغیرهای محیطی جاری
  • pip install [pkgs]% – برای نصب پکیج‌ها بدون ترک پوسته تعاملی
  • time% و timeit% – برای زمان‌بندی اجرای کد پایتون

برای مشاهده فهرست کامل به این آدرس () بروید.

قابلیت مفید دیگر IPython ارجاع به خروجی دستور قبلی است. In و Out اشیای واقعی هستند. می‌توانید از آن‌ها برای استفاده از خروجی سوم به صورت Out[3] بهره بگیرید. IPython را با دستور زیر نصب کنید:

pip3 install ipython

  1. خلاصه لیست

«خلاصه لیست» (List Comprehensions) می‌تواند جایگزین حلقه‌های زشت for شود که برای پر کردن لیست‌ها استفاده می‌شوند. ساختار مقدماتی یک خلاصه لیست به صورت زیر است:

[expression for item in list if conditional]

در ادامه مثال کاملاً ساده‌ای از پر کردن یک لیست با استفاده از یک دنباله از اعداد را می‌بینید:

از آنجا که می‌توانید از یک عبارت استفاده کنید، می‌توانید محاسباتی نیز روی آن اجرا کنید:

حتی می‌توانید یک تابع بیرونی را فراخوانی کنید:

در نهایت می‌توانید از if برای فیلتر کردن لیست استفاده کنید. در این مثال تنها مقادیری را نگه می‌داریم که بر 2 بخش‌پذیر باشند:

  1. بررسی مصرف حافظه اشیا

با استفاده از ()sys.getsizeof می‌توان وضعیت مصرف حافظه از سوی اشیای مختلف را بررسی کرد:

  1. بازگشت مقادیر چندگانه

تابع‌ها در پایتون می‌توانند بدون نیاز به یک دیکشنری، لیست یا کلاس بیش از یک متغیر را بازگشت دهند. طرز کار آن چنین است:

این موضوع در مورد تعداد محدودی از مقادیر بازگشتی مصداق دارد. اما هر چیزی که از 3 مقدار تجاوز کند باید در یک کلاس (داده) قرار گیرد.

  1. استفاده از کلاس‌های داده

از نسخه 3.7 پایتون به بعد، مفهومی به نام کلاس‌های داده ارائه شده است. کلاس داده چندین مزیت نسبت به کلاس‌های معمولی یا دیگر جایگزین‌ها مانند بازگشت مقادیر چندگانه یا دیکشنری دارد:

  • کلاس داده کمترین مقدار کد را لازم دارد.
  • می‌توان کلاس‌های داده را مقایسه کرد زیرا __eq__ پیاده‌سازی شده است.
  • می‌توانید به سهولت کلاس را به منظور دیباگ کردن پرینت کنید، زیرا __repr__ نیز پیاده‌سازی شده است.
  • کلاس‌های داده نیازمند «سرنخ نوع» (type hints) هستند که احتمال بروز باگ را کاهش می‌دهد.

در ادامه مثالی از طرز کار یک کلاس داده را می‌بینید:

  1. تعویض درجای متغیر

ترفند جالب زیر موجب می‌شود که چندین خط کد صرفه‌جویی کنید:

  1. ادغام دیکشنری‌ها (پایتون 3.5 به بالا)

از پایتون 3.5 به بعد ادغام دیکشنری‌ها آسان‌تر شده است:

در صورتی که برخی کلیدها همپوشانی داشته باشند، کلیدهای دیکشنری نخست بازنویسی می‌شوند.

  1. مرتب‌سازی حالت عنوان

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

  1. افراز یک رشته به یک لیست

1mystring = “The quick brown fox”

2mylist = mystring.split(‘ ‘)

3print(mylist)

4# [‘The’, ‘quick’, ‘brown’, ‘fox’]

برای افراز روی فضاهای خالی می‌توانید به spilt هیچ آرگومانی ندهید. به صورت پیش‌فرض همه موارد پشت سرهم فضای خالی به عنوان یک فضای خالی منفرد محسوب می‌شوند. بنابراین استفاده از ()mystring.split نتیجه مشابهی دارد.

  1. ایجاد یک رشته از لیستی از رشته‌ها

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

1mylist = [‘The’, ‘quick’, ‘brown’, ‘fox’]

2mystring = ” “.join(mylist)

3print(mystring)

4# ‘The quick brown fox’

  1. ایموجی

این ترفند بیشتر در زمان تحلیل شبکه‌های اجتماعی به کار می‌آید. ابتدا ماژول ایموجی را با دستور زیر نصب کنید:

pip3 install emoji

زمانی که نصب شد می‌توانید به صورت زیر عمل کنید:

برای کسب اطلاعات بیشتر و مشاهده مثال‌ها و مستندات به این صفحه () مراجعه کنید.

  1. برش دادن یک لیست

ساختار مقدماتی برش دادن به صورت زیر است:

a[start:stop:step]

  • 0 برای start
  • انتهای رشته برای end
  • 1 برای step

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

  1. معکوس کردن رشته‌ها و لیست‌ها

می‌توان از نماد slice که در بخش قبلی توضیح دادیم برای معکوس کردن یک رشته یا لیست استفاده کرد. با استفاده از مقدار گام منفی 1- عناصر معکوس می‌شوند:

  1. نمایش بچه گربه‌ها

در این ترفند بهانه‌ای به دست آورده‌ایم تا بالاخره تصویری از بچه‌گربه‌ها نمایش دهیم. البته با استفاده از این ترفند می‌توانید گراف‌ها و نمودارها را نیز نمایش دهید. ابتدا Pillow () را نصب کنید که یک فورک از کتابخانه تصویر پایتون محسوب می‌شود:

pip3 install Pillow

سپس تصویر زیر را در فایلی به نام kittens.jpg دانلود کنید:

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

همچنین می‌توانید این کار را مستقیماً از IPython انجام دهید:

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

map(function, something_iterable)

بنابراین باید تابعی برای اجرا به آن بدهیم و سپس شیئی ارسال کنیم که با تابع اجرا کند. این شیء می‌تواند هر شیء تکرارپذیر باشد. در مثال زیر از یک لیست استفاده کرده‌ایم:

  1. دریافت عناصر یکتا از لیست یا رشته

با ایجاد یک مجموعه به وسیله تابع ()set می‌توانید همه عناصر یکتا را از یک لیست یا شیء شبه لیست به دست آورید:

  1. یافتن مقدار دارای بیشترین فراوانی

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

در کد فوق:

  • ()Max بزرگ‌ترین مقدار لیست را بازگشت می‌دهد. آرگومان key یک تابع آرگومان منفرد برای سفارشی‌سازی ترتیب مرتب‌سازی می‌گیرد که در این مورد test.count است. این تابع روی هر آیتم تکرارپذیر اعمال می‌شود.
  • test.count یک تابع داخلی لیست است. یک آرگومان می‌گیرد و تعداد رخدادهای آرگومان را می‌شمارد. بنابراین test.count(1) مقدار 0 و test.count(1) مقدار 4 بازگشت می‌دهد.
  • Set(test) همه مقادیر یکتای تست را بازگشت می‌دهد که برابر با {1, 2, 3, 4} است.
  1. ایجاد نوار پیشروی

هر کسی می‌تواند نوار پیشروی خاص خود را بسازد که کار جذابی محسوب می‌شود. اما استفاده از پکیج progress موجب سهولت کار می‌شود:

pip3 install progress

اکنون می‌توانید یک نوار پیشروی را با کمترین تلاش ایجاد کنید:

انیمیشن زیر همه انواع نوارهای پیشروی را نمایش می‌دهد:

  1. استفاده از _ در یک پوسته تعاملی

در IPython می‌توانیم نتیجه آخرین عبارت را با عملگر زیرخط (_) به صورت زیر به دست آوریم:

In [1]: 3 * 3

Out[1]: 9

 

In [2]: _ + 3

Out[2]: 12

کد فوق در پوسته پایتون نیز کار می‌کند. به علاوه پوسته IPython امکان استفاده از out[n] برای به دست آوردن مقدار In[n] را نیز فراهم می‌سازد. مثلاً out[1] در مثال فوق مقدار 9 را به دست می‌دهد.

  1. ایجاد سریع وب سرور

با استفاده از دستور زیر می‌توانید به سرعت یک وب سرور ایجاد کرده و محتوای دایرکتوری جاری را روی آن عرضه کنید:

python3 -m http.server

این دستور در موادی مفید است که بخواهید برخی موارد را با همکار خود به اشتراک بگذارید و یا بخواهید یک سایت HTML ساده را تست کنید.

  1. رشته‌های چندخطی

با این که امکان استفاده از گیومه‌های سه‌تایی برای قرار دادن رشته‌های چندخطی در کد وجود دارد، اما روش مناسبی محسوب نمی‌شود. هر چیزی که بین گیومه‌های سه‌تایی قرار گیرد به رشته تبدیل می‌شود و این وضعیت شامل قالب‌بندی نیز می‌شود.

روش دیگر که ترجیح بیشتری دارد این است که چند خط را با هم الحاق کنیم تا امکان قالب‌بندی مناسب کد فراهم شود. تنها عیب این روش آن است که باید آن را صراحتاً در خط جدید قرار دهید:

  1. عملگر سه‌تایی برای انتساب شرطی

این هم یکی از روش‌های منسجم‌تر ساختن کد در عین حفظ خوانایی است:

[on_true] if [expression] else [on_false]

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

x = “Success!” if (y == 2) else “Failed!”

  1. شمارش رخدادها

می‌توانید از Counter از کتابخانه collections برای به دست آوردن شماره همه عناصر یکتا در یک لیست استفاده کنید.

  1. زنجیره‌سازی عملگرهای مقایسه

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

  1. افزودن رنگ بیشتر
  2. کار با تاریخ

pip3 install python-dateutil

با استفاده از این کتابخانه کارهای جالب زیادی می‌توان انجام داد. ما صرفاً یک مثال را معرفی می‌کنیم که به طور خاص مفید است: در این مثال تاریخ‌ها را از فایل‌های لاگ و نظایر آن به صورت فازی تحلیل می‌کنیم:

  1. تقسیم صحیح

در پایتون 2 عملگر تقسیم (/) به صورت پیش‌فرض تقسیم صحیح انجام می‌دهد، مگر این که یکی از عملوندهای آن عدد اعشاری باشد. بنابراین رفتاری مانند زیر دارد:

# Python 2

5 / 2 = 2

5 / 2.0 = 2.5

در پایتون 3 عملگر تقسیم به صورت پیش‌فرض تقسیم اعشاری انجام می‌دهد و عملگر // به عملگر تقسیم صحیح اختصاص یافته است. بنابراین وضعیت زیر برقرار است:

Python 3

5 / 2 = 2.5

5 // 2 = 2

برای این که با انگیزه این تغییر به صورت کامل آشنا شوید به این آدرس () بروید.

pip install chardet

chardetect somefile.txt

somefile.txt: ascii with confidence 1.0

همچنین می‌توانید از این کتابخانه به صورت برنامه‌نویسی شده استفاده کنید.

سخن پایانی

به این ترتیب به پایان این فهرست کاربردی با موضوع معرفی 30 ترفند مفید و مهم پایتون رسیدیم. امیدواریم از مطالعه این مطلب بهره‌مند شده باشید.

برای کدنویسی بهینه در پایتون، استفاده از ترفندهای مختلف می‌تواند به شما کمک کند تا کدهای خود را کارآمدتر و خواناتر بنویسید. یکی از این ترفندها استفاده از کتابخانه‌های استاندارد پایتون است. کتابخانه‌های استاندارد پایتون شامل مجموعه‌ای از ماژول‌ها و توابع هستند که توسط جامعه توسعه‌دهندگان پایتون بهینه‌سازی شده‌اند و استفاده از آن‌ها می‌تواند زمان توسعه را کاهش دهد و کارایی کد را افزایش دهد. به عنوان مثال، استفاده از توابع موجود در کتابخانه collections می‌تواند به شما کمک کند تا ساختارهای داده پیچیده‌تر را با کارایی بیشتری مدیریت کنید.

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

یکی دیگر از ترفندهای مهم برای کدنویسی بهینه در پایتون استفاده از تکنیک‌های بهینه‌سازی حافظه و زمان اجرا است. به عنوان مثال، استفاده از generator ها به جای لیست‌ها می‌تواند به شما کمک کند تا حافظه کمتری مصرف کنید و کدهای خود را سریع‌تر اجرا کنید. همچنین، استفاده از توابع lambda برای نوشتن توابع کوچک و موقت می‌تواند کدهای شما را خواناتر و مدیریت آن‌ها را ساده‌تر کند. بهینه‌سازی کدهای پایتون با استفاده از این تکنیک‌ها می‌تواند تاثیر زیادی بر عملکرد و کارایی برنامه‌های شما داشته باشد.

با توجه به نیاز روزافزون به برنامه‌نویسان ماهر در زمینه پایتون، مجتمع فنی تهران دوره‌های آموزشی جامع و کاربردی در این زمینه ارائه می‌دهد. این دوره‌ها به شما کمک می‌کنند تا با تکنیک‌ها و ترفندهای بهینه‌سازی کدنویسی در پایتون آشنا شوید و بتوانید کدهایی کارآمدتر و بهینه‌تر بنویسید. اساتید مجرب و برنامه‌های آموزشی جامع این مجتمع، فرصتی مناسب برای یادگیری و پیشرفت در زمینه برنامه‌نویسی پایتون فراهم کرده‌اند.

 

دکمه بازگشت به بالا