بریم ببینیم ساختار for-else چیه
در زبان پایتون اگه لازم شد تو حلقه (for یا while) چک کنیم ببینیم حلقه break شده یا نه، لازم نیست شرط بذاریم توی شرط متغیر تعریف کنیم و آخرش چک کنیم اگه متغیره فلان بود پس حلقه نشکسته. خلاصه این که نباید هزار جور «فلانِ وارونه» چیز کنیم. راهش اینه:
در زبان پایتون اگه لازم شد تو حلقه (for یا while) چک کنیم ببینیم حلقه break شده یا نه، لازم نیست شرط بذاریم توی شرط متغیر تعریف کنیم و آخرش چک کنیم اگه متغیره فلان بود پس حلقه نشکسته. خلاصه این که نباید هزار جور «فلانِ وارونه» چیز کنیم. راهش اینه:
python courses
Photo
کجا دیگه for-else به درد میخوره؟ مثلا برای حلقههای تو در تو وقتی یکی از حلقهها بشکنه، تشخیصش سخته اما اینجوری میشه مساله رو به خوبی و خوشی رفع و رجوع کنید
(توی پرانتز بگم حلقه تو در تو خیلی هم چیز خوبی نیست توی pep20 اومده که flat is better than nested)
(توی پرانتز بگم حلقه تو در تو خیلی هم چیز خوبی نیست توی pep20 اومده که flat is better than nested)
یکی از خفن ترین تغییراتی که زبان پایتون ورژن 3.8 داشت معرفی اپراتور walrus یا «دونقطه مساوی» یا := بوده. با این اپراتور میتونیم به متغیر مقداری تخصیص بدیم و دقیقا همونجا هم ازش استفاده کنیم. یه نمونه استفادهاش رو ببینید
والروس (walrus) اسم یه حیوانه، اونی که دندوناش بلنده:فُک
والروس (walrus) اسم یه حیوانه، اونی که دندوناش بلنده:فُک
python courses
یکی از خفن ترین تغییراتی که زبان پایتون ورژن 3.8 داشت معرفی اپراتور walrus یا «دونقطه مساوی» یا := بوده. با این اپراتور میتونیم به متغیر مقداری تخصیص بدیم و دقیقا همونجا هم ازش استفاده کنیم. یه نمونه استفادهاش رو ببینید والروس (walrus) اسم یه حیوانه،…
حالتی ک تا الان استفاده میکردیم
python courses
یکی از خفن ترین تغییراتی که زبان پایتون ورژن 3.8 داشت معرفی اپراتور walrus یا «دونقطه مساوی» یا := بوده. با این اپراتور میتونیم به متغیر مقداری تخصیص بدیم و دقیقا همونجا هم ازش استفاده کنیم. یه نمونه استفادهاش رو ببینید والروس (walrus) اسم یه حیوانه،…
حالتی که از 3.8 ب بعد استفاده میکنیم:)
علامت @ در پایتون برای تعریف دکوراتور قبل تابع و کلاس استفاده میشه. ولی یه جای دیگه هم @ میتونه استفاده بشه: به عنوان یک عملگر باینری (مثل جمع و ضرب و ...) و اسمش هم برای «ضرب ماتریسی» رزرو شده.
حالا ما خودمون میتونیم کلاس «یه چیزی» رو بنویسیم و براش matmul تعریف کنیم
حالا ما خودمون میتونیم کلاس «یه چیزی» رو بنویسیم و براش matmul تعریف کنیم
در زبان #پایتون برای هر کلاسی به صورت پیشفرض امکان ساختن attribute به صورت دینامیک وجود داره. از طرفی باعث میشه استفاده از حافظه بره بالا.
میتونیم با slots جلوی ساخته شدن اتریبیوتها به صورت دینامیک را بگیریم. تفاوتش را ببینید:
میتونیم با slots جلوی ساخته شدن اتریبیوتها به صورت دینامیک را بگیریم. تفاوتش را ببینید:
python courses
Photo
ولی داستان چیه که #پایتون میتونه به صورت دینامیک اتریبیوت اضافه کنه؟
جوابش به همون dict مربوط میشه ولی بیاین مرحله به مرحله چک کنیم ببینیم چه اتفاقی میافته
👇
جوابش به همون dict مربوط میشه ولی بیاین مرحله به مرحله چک کنیم ببینیم چه اتفاقی میافته
👇
python courses
ولی داستان چیه که #پایتون میتونه به صورت دینامیک اتریبیوت اضافه کنه؟ جوابش به همون dict مربوط میشه ولی بیاین مرحله به مرحله چک کنیم ببینیم چه اتفاقی میافته 👇
۱. مثلا آبجکت whatever را فرض کنید که dict هم داره.
۲. حالا ما از whatever می پرسیم whatever.folan مقدارش چیه
۳. در واقع ما با نوشتن whatever.folan داریم متد getattr از whatever را صدا میزنیم و folan تبدیل میشه به رشته "folan" اینجوری:
whatever.__getattr__("folan")
۴. بعد getattrمیره سراغ dict خودش ببینه کلید "folan"تعریف شده یا نه. یعنی این شکلی:
self.__dict__["folan"]
۵. مقدارش رو ریترن میکنه.
۲. حالا ما از whatever می پرسیم whatever.folan مقدارش چیه
۳. در واقع ما با نوشتن whatever.folan داریم متد getattr از whatever را صدا میزنیم و folan تبدیل میشه به رشته "folan" اینجوری:
whatever.__getattr__("folan")
۴. بعد getattrمیره سراغ dict خودش ببینه کلید "folan"تعریف شده یا نه. یعنی این شکلی:
self.__dict__["folan"]
۵. مقدارش رو ریترن میکنه.
python courses
۱. مثلا آبجکت whatever را فرض کنید که dict هم داره. ۲. حالا ما از whatever می پرسیم whatever.folan مقدارش چیه ۳. در واقع ما با نوشتن whatever.folan داریم متد getattr از whatever را صدا میزنیم و folan تبدیل میشه به رشته "folan" اینجوری: whatever.__getattr__("folan")…
موقع ست کردن هم اینجوری میشه:
۱. مقدار ست میشه
whatever.folan = "ye chizi"
۲. متد setattr صدا زده میشه ولی یه آرگومان بیشتر داره چون باید مقدار value را هم بگیره. منظور از value هر چیزیه که سمت راست علامت مساوی نوشتیم.
whatever.__setattr__("folan", "ye chizi")
۳. بعدش هم که کلید دیکشنری اگه وجود نداشته باشه اضافه میشه و اگه وجود داشت، مقدارش (value) آپدیت میشه
self.__dict__["folan"] = "ye chizi"
۱. مقدار ست میشه
whatever.folan = "ye chizi"
۲. متد setattr صدا زده میشه ولی یه آرگومان بیشتر داره چون باید مقدار value را هم بگیره. منظور از value هر چیزیه که سمت راست علامت مساوی نوشتیم.
whatever.__setattr__("folan", "ye chizi")
۳. بعدش هم که کلید دیکشنری اگه وجود نداشته باشه اضافه میشه و اگه وجود داشت، مقدارش (value) آپدیت میشه
self.__dict__["folan"] = "ye chizi"