ترفندهای کمتر شناخته شده‌ی پایتون که هر توسعه‌دهنده‌ای باید بداند | بخش اول

ترفندهای کمتر شناخته شده‌ی پایتون که هر توسعه‌دهنده‌ای باید بداند | بخش اول

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

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

1. ایجاد یک سرور اشتراک‌گذاری فایل

پایتون با ایجاد یک سرور FTP آنلاین رایگان، یک مکانیزم اشتراک‌گذاری ساده فایل‌ها، از یک کامپیوتر به کامپیوتر دیگر یا دستگاه همراه را امکان‌پذیر می‌کند. برای بهره‌مندی از این مکانیزم قدرتمند، ابزار خط فرمان (Command Prompt) را باز کنید و دستور زیر را درون آن تایپ کنید. 

python -m http.server 5000

شما می‌توانید محدوده‌ی پورت را از 0 تا 65353 انتخاب کنید. پس از اجرای کد فوق، مشاهده خواهید کرد که سرور شما در آدرس آی‌پی و پورت 127.0.0.1:5000 کار می‌کند. 

اکنون کروم یا هر مرورگری در دستگاه سیار مثل تبلت‌ها یا گوشی‌های خود را باز کنید و عبارت زیر را در آن تایپ کنید.  دقت کنید در بخش اول باید آدرس آی‌پی دستگاه و بعد از دو نقطه شماره پورت را وارد کنید. 

YOUR_COMPUTER_IP_ADDRESS:PORT_NUMBER

برای دریافت آدرس آی‌پی، می‌توانید از دستور ipconfig در پنجره خط فرمان استفاده کنید. دقت کنید که آدرس آی‌پی را بر مبنای پروتکل IPv4 مشاهده خواهید کرد. به عنوان مثال، اگر آدرس آی‌پی شما 192.168.39.145 و شماره پورت 5000 باشد، سرور اشتراک فایل در 192.168.39.145:5000 اجرا می‌شود. 

2. ارسال چند پارامتر بدون تعریف آن‌‌ها

در پایتون، با کمک *args، می‌توانید هر تعداد آرگومان را بدون تعیین تعداد آن‌ها برای یک تابع ارسال کنید.

def add_numbers(*numbers):
sum = 0
for number in numbers:
sum += number
return sum
print(add_numbers(5,6,233,56,3,5,2,5)) ## 315

با استفاده از kwargs** می‌توانید هر تعداد آرگومان کلیدی را به یک تابع ارسال کنید.

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

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

ترفند  اضافه کردن عناصر به لیست تنها از طریق یک خط کد

4. بررسی نوع متغیر - Type Checking

بررسی نوع متغیر، یکی از وظایف عادی برنامه‌نویسان است که البته برای درک درست نوع داده یک متغیر، باید دانش کافی در این زمینه داشته باشند. با این‌حال، راهکار دیگری برای این منظور وجود دارد. اگر از تابع isinstance در پایتون استفاده کنید، بسته به این‌که آیا شی نمونه‌ای از کلاس است یا خیر یک مقدار درست یا اشتباه منطقی (Boolean) بر می‌گرداند. این تابع دو پارامتر دریافت می‌کند که شی و کلاس داده‌ای است. لازم به توضیح است که شما می‌توانید از این تابع در ارتباط با بررسی نوع‌های معمولی نیز استفاده کنید.

ترفند استفاده از از تابع isinstance برای بررسی نوع متغیر در پایتون

5. حذف داده‌های زائد 

وقتی متونی دریافت می‌کنیم، کاراکترها و متن‌های ناخواسته زیادی (\t، \n، \t، و غیره) ممکن است در آن وجود داشته باشد. برای حذف داده‌های غیر ضروری از تکنیکی که پیرایش (Trimming) نام دارد، استفاده کنیم. پایتون تابعی به نام strip در اختیار ما قرار می‌دهد تا این داده‌های غیر ضروری را از متن حذف کنیم. 

-------------- Trimming A String ----------- 
data = "\n\n\n \t  David's Foord and Restaurant \t \n\n\n    "
print(data.strip())
--o/p-----
David's Foord and Restaurant--------- Trimming List of Strings ---------
data = ["\n\n\n Burger \t   ","\n\t Pizza \t  "]
cleaned_data = [i.strip() for i in data]
print(cleaned_data)
---o/p----
["Burger","Pizza"]

6. استفاده از عملگر _

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

 ---------- As a Variable -----------
_ = 10
b = 20
sum = _+b
print(sum)
------
30------------ Restoring The Previous Evaluation Result ------
>>> 200+400
600
>>> _*5
3000

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

7. استفاده از نام‌های کوتاه‌تر

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

## Normal Way 
import numpy 
import speech_recognition## Shorten Name
import numpy as np
import speech_recognition as sr

8. کپی کردن اطلاعات دو لیست به یکدیگر به شکل حرفه‌ای

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

ترفند چاپ عناصر متناظر لیست‌ها

9. استفاده از قابلیت‌های کاربردی Slicing  

Slicing یکی از قابلیت‌های کاربردی و از پیش ساخته پایتون است که اجازه می‌دهد به بخش‌های خاصی از یک رشته دسترسی داشته باشید. همچنین، می‌توان از قابلیت فوق برای تغییر یا حذف بخش‌هایی از یک رشته استفاده کرد. در قطعه کد زیر دو کاربرد این تکنیک را مشاهده می‌کنید.

''' Checking For Palindrome '''
name = "wow"
print(name==name[::-1])
-----------
True''' Retriving Even Numbers From a Natural Sequence '''
natural_numbers = [1,2,3,4,5,6,7,8,9,10]
even_numbers = natural_numbers[1::2]
print(even_numbers)
-------------
[2,4,6,8,10]

10. شکستن خط‌های طولانی با بک‌اسلش (\)

یکی از بزرگ‌ترین دلایلی که باعث ناخوانایی کدها می‌شود، آدرس‌های طولانی فایل‌ها‌، لینک‌ها یا عناصر درون یک لیست است. برای روشن شدن موضوع، به مثال زیر دقت کنید:

url = 'https://medium.com/pythoneers/10-underrated-python-packages-every-data-scientist-should-know-86b4355cc35e'

می‌توانید با کمک یک بک‌اسلش، شکستگی در کدها ایجاد کنید. 

url = 'https://medium.com/pythoneers/'\
'10-underrated-python-packages-every-'\
'data-scientist-should-know-86b4355cc35e'
print(url)
----------------
https://medium.com/pythoneers/10-underrated-python-packages-every-data-scientist-should-know-86b4355cc35e

11. یافتن تعداد دفعات تکرار یک عنصر 

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

from collections import Counter
data= [96,95,96,87,87,88,56,57,57]
occurences = Counter(data)
print(occurences)
---------------
Counter({96: 2, 87: 2, 57: 2, 95: 1, 88: 1, 56: 1})

12. گرفتن چند ورودی به سبک پایتون! 

پایتون راه ساده‌ای برای دریافت چند ورودی با استفاده از یک خط کد در اختیار برنامه‌نویسان قرار می‌دهد. پایتون اجازه می‌دهد، چند متغیر را در یک خط تعریف کنید.

x, y = input().split()## Interger Inputs
x, y = map(int, input().split())## Space Seperated Inputs
data = list(map(int, input().split()))

13. استفاده از تابع تک خطی 

پایتون یک تابع تک خطی ارائه می‌دهد که تابع لامبدا (lambda) نامیده می‌شود. تابعی که تحت عنوان تابع ناشناس (Anonymous Function) نیز از آن یاد می‌شود. این نام‌گذاری به این دلیل انجام شده که برای تعریف تابع، نیازی به کلمه‌های کلیدی نیست. تابع فوق می‌تواند هر تعداد آرگومان را دریافت کند، اما در هر لحظه قادر به دریافت یک دستور است. تصویر زیر حالت فوق را نشان می‌دهد.

تابع لامبدا در پایتون

14. اعمال یک تابع روی تک تک عناصر لیست 

شما می‌توانید از تابع map روی تک تک عناصر یک لیست استفاده کنید. تابع فوق دو پارامتر دریافت می‌کند. پارامتر اول تابعی است که امکان استفاده از آن به شکل لامبدا یا همراه با def وجود دارد و پارامتر دوم یک شی تکرارشونده است. قطعه کد زیر این موضوع را نشان می‌دهد. 

ID = ["R72345","R72345&"]
results = list(map(str.isalnum, ID))
print(results)
-----------------
[True, False]

15. محاسبه زمان اجرای یک برنامه

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

''' The Simplest Way '''
import time
start_time = time.time()
...
func()
...
end_time = time.time()
print("Execution Time: ",(end_time-start_time))Check Out This StackOver Flow Discussion For More Examples On How To Calculate Execution Time.

16. استفاده از متد Get همراه با براکت‌ها

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

data_dict = {a:1, b:2,c:3}print(data_dict['d']) ## KeyError: 'd'print(data_dict.get('d')) ## None 

17. رسیدگی به استثناهای زمان اجرا

استثنا (Exception) حالتی است که در حین اجرای برنامه به دلایل مختلفی اتفاق می‌افتد و باعث ایجاد وقفه در اجرای برنامه می‌شود. برای رسیدگی به استثناها در پایتون از بلوک try و except استفاده می‌کنیم. بلوک try شامل کدی است که باید اجرا شود و بلوک except شامل کدی است که در صورت بروز خطا در بلوک try اجرا، می‌شود. بهتر است، کدهایی که احساس می‌کنید احتمال بروز خطا در ارتباط با آن‌ها وجود دارد را درون بلوک try قرار دهید تا عملکرد برنامه ناگهان به دلیل یک استثنا متوقف نشود. قطعه کد زیر نحوه‌ی استفاده از بلوک فوق را نشان می‌دهد. 

''' Exception '''
a = 5
b = 0
print(a/b) ## ZeroDivisionError: division by zero''' Exception Handling '''
try:
    a = 5
    b = 0
    print(a/b)
except:
    print("Can't Divide Number With 0")
-----------------------
Can't Divide Number With 0

18. تبدیل یک متد عادی به ایستا

متد ایستا (Static) نوعی متد در کلاس‌های پایتون است که به حالت خاصی از کلاس محدود می‌شود. آن‌ها نمی‌توانند به وضعیت کلاس دسترسی داشته باشند یا آن‌را به‌روز کنند. شما می‌توانید با استفاده از staticmethod(function) یک متد عادی یا متد نمونه (Instance) را به یک متد ایستا تبدیل کنید. قطعه کد زیر نحوه‌ی انجام این‌کار را نشان می‌دهد.

class ABC:
def abc(num1,num2):
print(num1+numn2)


# changing torture_students into static method
ABC.abc = staticmethod(ABC.abc)

ABC.abc(4,5) ## 9

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

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس