کد پایتون خود را با این نکات مفید و ساده پاک کنید.
نوشتن کد کار همیشه کافی نیست. شما باید سعی کنید کدی با ساختار مناسب بنویسید که درک آن نیز آسان باشد. کد پاک نگهداری نرم افزار را برای شما و دیگران آسان می کند.
پایتون دارای ویژگی ها و توابع زیادی است که می تواند به شما در نوشتن کدهای تمیزتر کمک کند. یک تعدادی از بهترین هاش اینجاست.
1. بسته شدن منابع را با Context Manager به صورت خودکار انجام دهید
زمانی که کد شما با منابع زیادی در تعامل است، بستن دستی منابع ممکن است ناخوشایند باشد. ممکن است فراموش کنید یک منبع را ببندید. این باعث می شود برنامه شما از منابع سیستم به طور ناکارآمد استفاده کند که می تواند منجر به نشت حافظه شود.
این کد یک فایل را باز می کند، سپس آن را به صورت دستی می بندد:
file = open('test.txt', 'r')
file_contents = file.read()
file.close()
words = file_contents.split(' ')
word_count = len(words)
print(word_count)
شما می توانید بسته شدن فایل را با استفاده از یک مدیر زمینه به طور خودکار انجام دهید. مدیران زمینه منابع را برای شما مدیریت می کنند، بنابراین لازم نیست به یاد داشته باشید که آنها را به صورت دستی مدیریت کنید. از عبارت with برای ایجاد زمینه ای برای مدیریت یک منبع استفاده کنید:
with open('test.txt', 'r') as file:
file_contents = file.read()
words = file_contents.split(' ')
word_count = len(words)
print(word_count)
کد موجود در این بلوک در متن فایلی که باز می شود اجرا می شود. پایتون به طور خودکار آن فایل را هنگامی که کد از آن متن خارج می شود، می بندد، حتی اگر یک استثنا رخ دهد.
2. نوشتن بیانیه های شرطی تمیزتر
ممکن است هنگام برخورد با عبارات if-else، کدهای غیرضروری زیادی بنویسید. پایتون دارای عملگرهای سه تایی است که به شما کمک می کند عبارات فشرده تری بنویسید. بلوک کد زیر یک دستور if-else معمولی را نشان می دهد.
condition = True
if condition:
x = 1
else:
x = 0
print(x)
می توانید این کد را با استفاده از یک عملگر سه تایی بازنویسی کنید که به شما امکان می دهد شرط را در یک خط کد بنویسید.
condition = True
x = 1 if condition else 0
print(x)
توجه به این نکته مهم است که هنگام اجرای منطق ساده باید از عملگرهای سه تایی استفاده کنید. در منطق پیچیده تر و عبارات شرطی تو در تو، درک عملگر سه تایی ممکن است سخت شود.
3. پیگیری اقلام با تابع Enumerate
هنگام تکرار در لیست پایتون، می توانید به دو طریق به فهرست آیتم فعلی دسترسی داشته باشید. یکی از راه ها استفاده از حلقه for سنتی است. این به خوبی کار می کند، اما کد آنقدر که می تواند تمیز نیست. همچنین از شما می خواهد که ایندکس را به صورت دستی مقداردهی اولیه کنید.
cars = ['Bugatti', 'Mercedes', 'Toyota']
index = 0
for car in cars:
print(index, car)
index += 1
راه دیگر استفاده از تابع enumerate داخلی پایتون است. این به شما این امکان را می دهد که در حین حلقه زدن به ایندکس و مقدار مربوطه در لیست دسترسی داشته باشید.
cars = ['Bugatti', 'Mercedes', 'Toyota']
for index, car in enumerate (cars):
print(index, car)
اکنون لازم نیست فهرست را به صورت دستی پیگیری کنید.
4. حلقه زدن بر روی چندین لیست با تابع Zip
همچنین می توانید از تابع enumerate برای حلقه زدن چندین لیست به طور همزمان استفاده کنید. فهرست اولین لیست را دریافت کنید، سپس از آن برای دسترسی به مقادیر مربوطه در لیست های دیگر استفاده کنید.
english_names = ['food', 'water', 'car']
spanish_names = ['alimento', 'agua', 'auto']
for index, name in enumerate(english_names):
spanish = spanish_names [index]
print (f' {name} in spanish is {spanish}')
این به خوبی کار می کند، اما اگر تعداد لیست ها افزایش یابد، باید کدهای غیر ضروری زیادی بنویسید. برای نوشتن کد پاک کننده می توانید از تابع zip استفاده کنید و نام لیست خود را به آن ارسال کنید.
english_names = ['food', 'water', 'car']
spanish_names = ['alimento', 'agua', 'auto']
for english, spanish in zip(english_names, spanish_names):
print(f' {english} in spanish is {spanish}')
شما باید از تابع enumerate برای حلقه زدن روی یک لیست استفاده کنید. اما اگر چندین لیست را با هم مرور می کنید، از تابع zip استفاده کنید.
5. مخفی کردن ورودی حساس کاربر با GetPass
هنگام وارد کردن اطلاعات حساس، ورودی نباید به صورت متن ساده بر روی صفحه نمایش قابل مشاهده باشد. روش معمول برای گرفتن ورودی در پایتون استفاده از تابع ورودی است:
username = input('Username: ')
password = input('Password: ')
print('Logging In...')
با این حال، عملکرد ورودی رمز عبور را به صورت متن ساده روی صفحه در هنگام تایپ قابل مشاهده می کند. برای اطمینان از اینکه رمز عبور روی صفحه نمایش داده نمی شود، باید به جای آن از تابع getpass استفاده کنید:
from getpass import getpass
username = input('Username: ')
password = getpass('Password:')
print('Logging In...')
ماژول getpass بخشی از کتابخانه استاندارد پایتون است، بنابراین نیازی به نصب آن ندارید.
6. خوانایی اعداد بزرگ با استفاده از متغیرهای Underscore
وقتی در برنامه خود با اعداد زیادی سروکار دارید، خواندن آنها در یک نگاه بسیار سخت است. اختصاص دادن اعداد نادرست به متغیرها منجر به یک برنامه معیوب می شود و تشخیص این خطا می تواند بسیار سخت باشد.
num1 = 10000000000
num2 = 100000000
total = num1 + num2
print(total)
میتوانید کد بالا را با استفاده از زیرخط برای جدا کردن گروههای هزار نفری بازنویسی کنید، که روشی رایج برای خواناییتر کردن اعداد بزرگ است.
num1 = 10_000_000_000
num2 = 100_000_000
total = num1 + num2
print(f'{total:,}')
رشته f در تابع چاپ خروجی را با استفاده از جداکننده هزاران جدا می کند.
7. استفاده از تابع Help برای کسب اطلاعات بیشتر در مورد یک ماژول
تابع help در پایتون بسیار مهم است. به شما اطلاع می دهد که چگونه از ماژولی که نصب کرده اید استفاده کنید. برای استفاده از آن، ماژول را نصب کنید، سپس مفسر پایتون را در ترمینال راه اندازی کنید و به مسیری که ماژول را نصب کرده اید اشاره کنید. ماژول را وارد کنید و در نهایت نام ماژول را به تابع help ارسال کنید.
برای کشف اینکه از کدام روش ها و ویژگی هایی می توانید استفاده کنید، تابع help را با تابع dir جایگزین کنید.
تابع dir متدها و ویژگیهایی را برمیگرداند که ماژول از کل مستندات پشتیبانی نمیکند. این برای زمانی مفید است که می خواهید نگاهی اجمالی به کارهایی که ماژول انجام می دهد داشته باشید.
نوشتن کدهای پاک کننده پایتون
پایتون یک زبان بسیار متنوع است. مانند هر زبان دیگری، به مرور زمان در نوشتن کدهای پاکتر پایتون بهتر خواهید شد.
پایتون ماژول ها و توابع داخلی زیادی دارد. در برخی موارد، به دلیل عدم آگاهی از وجود یک تابع خاص، می توانید کدهایی بنویسید که خوانا نیستند. برای اطمینان از آگاهی بیشتر، باید مقالات بیشتری در مورد نحوه نوشتن کد بهتر بخوانید.