کانسپت های کمتر شناخته شده اما مهم زبان پایتون 🐍(پارت2)
سلام :)
بریم سراغ چند تا کانسپت دیگه که از اهمیت زیادی برخوردارن ولی قبلش اینو بگم که یه دوستی تو تلگرام یه کامنتی گذاشته بود که این مفاهیم کمتر شناخته شده نیستن و باید بگم دقیقا داره درست میگه منظور منم از این کلمه این بود که اکثر افراد ازشون استفاده نمیکنن و ترجیح میدن به صورت سنتی کدشون رو بنویسن و از این قابلیت ها استفاده نمیکنن!
1- assert
فرض کنید میخواید یه جایی از کدتون رو دیباگ یا تست کنید و میخواید ببینید که خروجی مدنظر رو میده یا مثلا نوع خروجی اونی هست که میخاید یا نه(و یا هر چی. معمولا میاید و همچین چیزی مینویسید:
i = 2
if type(i) != int:
print('Error')
raise TypeError()اما ما تو پایتون چیزی داریم به نام assert ها که میان این عمل رو خیلی کوتاه تر و استاندارد تر انجام میدن.
i = 2
assert type(i) == int , "Type must be integer"
اینجا وقتی شرطمون Flase بشه پایتون یه AssertionError رو raise میکنه که نشون دهنده اینه که یه جایی کاندیشنمون فالس شده.(اگه true شه اجرا نمیشه!!
این قابلیت فقط برای تست به کار نمیره بلکه یکی از کاربرد های اساسیش برای وقتیه که میخایم کد رو داکیومنت کنیم تا برنامه نویس های دیگه کد رو میخونن بدونن شرط ها چه انتظار ها و رفتاری دارن.(اصولا کد خوان ها میرن مستیم دنبال assert میگردن تا بدونن چی به چیه :)
2- command line arguments
قطعا براتون پیش اومده که یه اسکریپت پایتونی دارید که نیاز داره وقتی ران میشه یه ورودی از کاربر بگیره احتمالا همچین کدی نوشتی:
user_input1 = int(input('Enter first number'))
user_input2 = int(input('Enter second number'))
print(user_input1 + user_input2)اما یه راه بهتر هست که میتونید ورودی هاتون رو مستقیما از کامند لاین یا ترمینال هنگام اجرای اسکریپت دریافت کنید.
import sys
print(int(sys.argv[1]) + int(sys.argv[2]))برای اینکار ما به ماژول sys نیاز داریم که به طور دیفالت توی کتابخانه استاندارد پایتون وجود داره.
چند تا نکته:
۱- متغیر argv یه متغیر از جنس لیسته که ورودی هایی که از cli و دستور python3 میاد رو تو خودش ذخیره میکنه و همیشه مقدار عنصر اول اسم فایل اسکریپتی هستش که با دستور python3 اجرا کردید.
۲- اگر مقدارتون عددیه باید همیشه با تابع ()int مقدار هاتون رو تبدیل یا اصطلاحا parse کنید چون مقادیر لیست argv همیشه string هستن!
3- doc strings
این قابلیت خیلی به مستند سازی و document سازی کمک میکنه.
مثلا وقتی یه کلس یا یه تابع دارید بهتره به جای کامنت کردن توضیحات از داک استرینگ ها استفاده کنید. نسبت به کامنت ها خوانا تر و استاندارد تره!
class LearnPOV(CS12):
"""type doc string here! :)
+ multiline """
...4_ __str__
نمیخواستم وارد مجیک متود ها بشم ولی خب شدم و ادامش رو توی پست های بعدی میرم دیگه :)
مجیک متد یا داندر متد __str__ وقتی اجرا میشه که آبجکتی که از روی کلاسش ساخته شده رو بهش مقدار بدن و مسقیما پرینت بگیرن
class Test:
def --init--(self,name:str):
self.name = name
def --str--(self):
return f"Hi its a object that have a name argument : {self.name}"
obj = Test(name='Farzad')
print(obj)
# output: Hi its a object that have a name argument : Farzadدیگه ناخواسته وارد مبحث باحال داندر متد ها شدیم و توی پارت بعدی این پست به چند تا دیگشون میپردازم :)
فلا اینا رو داشته باشید تا پارتای بعد خیلی مخلصیم :)