عادت های بد Python

اسم این زبان شریف «پایتون» نیست! به خدا نیست. به پیر نیست. به پیغمبر نیست. تلفظ درستش «پایتان» عه.سلام. تو این مقاله به چند تا عادت بد در کد نویسی Python اشاره کردم. هر چند الزاما این عادت های بد منجر به خطا نمی شن ولی بهتره ترکشون کنی تا کدت استاندارد تر بشه و احتمال بروز هر گونه خطای منطقی یا سهوی کاهش پیدا کنه. تا حد ممکن خلاصه نوشتم.۱ - اسم این زبان شریف «پایتون» نیست! به خدا نیست. به پیر نیست. به پیغمبر نیست. تلفظ درستش «پایتان» عه.۲ - موقعی که داری کتاب خونه های مختلف رو import میکنی از * (بچه ها اسم این کاراکتر asterisk عه) استفاده نکن. چون debug کردنت سخت میشه. مثلا تو کد زیر چطوری میخای متوجه بشی که تابع my_function متعلق به کتاب خونه my_library هست یا نه؟from my_library import * my_value = my_function('my_argument')۳ - اسم فایلی که خودت داری توش کد می نویسی رو برابر با اسم library های خود پایتان یا library های دیگه ای که خودت درست کردی نذار. مثلا اسم file ات json.py نباشه چون تو خودت پایتان ما کتاب خونه json رو داریم.۴ - سعی کن تا جایی که میشه از + (اسم این کاراکتر plus یا addition operator عه) واسه چسبوندن دو تا رشته به هم استفاده نکنی. به جاش می تونی از fstring (پایتان ۳.۶ به بعد) یا متد format روی رشته استفاده کنی.full_name = &quotbizhan&quot + &quothejazi&quot # BAD full_name = f&quotbizhan {my_family}&quot # GOOD full_name = &quotbizhan {}&quot.format(&quothejazi&quot) # GOOD۵ - وقتی میخای از Falsy (بچه ها Falsy بودن یک متغیر یا مقدار با False بودنش فرق داره. مثلا تو پایتان یک رشته خالی Falsy هست ولی Flase نیست. به عبارتی توی شرط ها برابر با False در نظر گرفته میشه ولی ذاتا False نیست) بودن یک مقدار توی شرط استفاده کنی نیازی نیست که داخل bool قرارش بدی. به تنهایی کفایت میکنه. توی پایتان Falsy Value ها این ها هستن: مقدار عددی صفر (چه int چه float)رشته خالی (مثلا "", '', '''''', """""")خود Falseمقدار Noneیک list خالی (مثلا [ ])یک tuple خالی (مثلا ())یک دیکشنری خالی (مثلا { })# BAD SYNTAX if bool(user_input): print(&quotOK&quot) # GOOD if user_input: print(&quotOK&quot)۶ - اسم متغیر ها رو برابر با اسامی توابع داخلی پایتان مثل list و یا dict قرار نده. ممکنه ایجاد خطای منطقی کنه و مدت ها زمان ببره متوجه بشی ایراد کد از کجاست. list = [1,2,3,4] # BAD lst = [1,2,3,4] # GOOD۷ - وقتی میخای یک file رو باز کنی بهتره داخل try/except/finally بازش کنی تا اگه TraceBack (همون Error) داد بگیرش و برنامه مختل نشه:# GOOD try: file_handle = open(&quotmy_file.txt&quot) except: print(&quotFile Not Found!&quot) finally: print file_handle.read()۸ - حتما مطمئن شو که IDE (یعنی برنامه ای که باهاش کد می نویسی مثل VSCode یا Atom) ات جوری تنظیم شده که هر Tab رو به ۴ تا Space تبدیل کنه. اگه این طوری نشه ممکنه Tab و Space با هم قاطی بشن و همه چیز ۱۰۰ درصد درست به نظر باید ولی با TraceBack مواجه بشی!۹ - برای loop کردن (یعنی دونه به دونه عناصر یک متغیر جمعی مثل list یا dictionary رو گشتن) توی dictionary ها می تونی خیلی راحت از متد items استفاده کنی:for key, value in my_dictionary.items(): print(key, value)۱۰ - برای حذف عناصر تکراری از یک list راحت ترین راه اینه که به set تبدیلش کنیم و مجددا set حاصله رو به list تبدیل کنیم:uniques = list(set(my_list))۱۱ - واسه تبدیل همه عناصر یک list به integer (این مورد به خصوص وقت هایی به کار میاد که از کاربر کلی input گرفتی) می تونی list ات رو map کنی:integers = list(map(int, inputs_list))۱۲ - واسه مرتب کردن هر چیز قابل مرتب کردن (مثلا list) می تونی خیلی راحت از تابع sorted استفاده کنی:my_sorted_list = sorted(my_list) my_reverse_sorted_list = sorted(my_list, reverse=True)۱۳ - واسه مشاهده واژه های رزرو شده که نمی تونی ازشون تو نام گذاری متغیر ها استفاده کنی توی Python Shell (وقتی توی Command Line تایپ کنی python3 وارد محیطی میشی که می تونی Python رو خط به خط اجرا کنی که بهش میگن Python Shell) تایپ کن.help(&quotkeywords&quot)۱۴ - اگه توی python shell تایپ کنی import this برای یک شعر میاره که خلاصه کد نویسی تمیزه!۱۵ - از is و is not اکثرا برای مقایسه متغیر ها با مقادیر False, True و None استفاده میشه. توصیه نمیشه که دو تا متغیر رو با is یا is not با هم مقایسه کنی.if user_input is True: print("OK") # GOODif user_input is my_input: print("OK") # BAD۱۶ - چون توی پایتان عملگر === مثل jS یا PHP نداریم ممکنه فکر کنی 0 == 0.0 برابر با False میشه چون جنسشون فرق داره یکی int و اون یکی float عه ولی نه! پایتان بر اساس numeric بودن یا نبودن در نظر می گیره جنس رو و int و float هر دو numeric هستن.۱۷ - هر چند می تونی با string ها مثل list برخورد کنی و توشون loop کنی ولی چون string ها immutable هستن نمی تونی بگی:my_name = 'bizhan' my_name[3] = 'd' # TraceBack۱۸ - در پایتان ۳ به بعد حاصل تقسیم دو تا int بر هم float میشه! حتی اگه یک عدد صحیح باشه. حاصل تقسیم int بر float یا برعکس و float بر float هم میشه float. کلا پایتان ۳ در تقسیم ها float دوست عمل میکنه! مثلا:4/2 == 2.0۱۹ - اگه از محیط هایی مثل C و PHP یا مثلا jS میای احتمالا عادت داری که عملگر ++ یا -- داشته باشی (که توی for loop ها خیلی به کار میاد) ولی تو پایتان چنین خبری نیست! دلیلش هم مشخصه. توی پایتان حلقه for in خودش اتوماتیک همه کار ها رو برات می کنه. با این حساب اگه بازم دوست داری خودت به صورت دستی توی while این حالت رو ایجاد کنی می تونی این طوری کد بزنی (روش های دیگری هم هست):i = 0 while my_condition: i += 1 # OR i = i + 1۲۰ - یک عادت بدی که JSON و jS تو برنامه نویس ها ایجاد کردن اینه که از Object ها به عنوان Associative Array استفاده بشه در حالی که حقیقتا رسالت Object ها این نبوده. چون jS خودش Associative Array (یعنی آرایه هایی که بر خلاف شاخص های عددی، شاخص های حروفی دارن. مثلا به جای my_list[2] می گیم my_dict['name']) نداره مجبوره که این کارو بکنه. ولی وقتی به پایتان می رسیم دیگه باید عادت کنیم که وقتی JSON مون رو Parse کردیم به صورت Dictionary باهاش برخورد کنیم:import json my_dictionary = json.loads(json_string) print(my_dictionary[&quotname&quot])ختم سخنمن سعی کردم تو این مقاله ساده ترین و خلاصه ترین نکات رو بگم. برای مطالعه بیشتر می تونی توی YouTube یک گشت و گذاری داشته باشی. مباحثی مثل استفاده از Generator ها یا مثلا enumeration هم بود که دیدم ممکنه تخصصی بشه بی خیالش شدم. امیدوارم خوشت اومده باشه از این ۲۰ تا نکته.