python courses
69 subscribers
22 photos
2 files
14 links
اینجا دوره های مختلف و تریک های پایتونی رو قرار میدم به مرور
این دوره ها توی آپارات و ویرگول هم انتشار داده میشه!
آپارات:m.farahnak
ویرگول:fhot707
@javadfarah_py:تلگرام من
Download Telegram
python courses
Photo
‏کجا دیگه for-else به درد می‌خوره؟ مثلا برای حلقه‌های تو در تو وقتی یکی از حلقه‌ها بشکنه، تشخیصش سخته اما اینجوری می‌شه مساله رو به خوبی و خوشی رفع و رجوع کنید
(توی پرانتز بگم حلقه تو در تو خیلی هم چیز خوبی نیست توی pep20 اومده که flat is better than nested)
‏یکی از خفن ترین تغییراتی که زبان پایتون ورژن 3.8 داشت معرفی اپراتور walrus یا «دونقطه مساوی» یا := بوده. با این اپراتور می‌تونیم به متغیر مقداری تخصیص بدیم و دقیقا همونجا هم ازش استفاده کنیم. یه نمونه استفاده‌اش رو ببینید

والروس (walrus) اسم یه حیوانه، اونی که دندوناش بلنده:فُک
‏علامت @ در پایتون برای تعریف دکوراتور قبل تابع و کلاس استفاده می‌شه. ولی یه جای دیگه هم @ می‌تونه استفاده بشه: به عنوان یک عملگر باینری (مثل جمع و ضرب و ...) و اسمش هم برای «ضرب ماتریسی»‌ رزرو شده.

حالا ما خودمون می‌تونیم کلاس «یه چیزی» رو بنویسیم و براش matmul تعریف کنیم
‏در زبان ‎#پایتون برای هر کلاسی به صورت پیش‌فرض امکان ساختن attribute به صورت دینامیک وجود داره. از طرفی باعث می‌شه استفاده از حافظه بره بالا.
می‌تونیم با slots جلوی ساخته شدن اتریبیوت‌ها به صورت دینامیک را بگیریم. تفاوتش را ببینید:
python courses
Photo
‏ولی داستان چیه که ‎#پایتون می‌تونه به صورت دینامیک اتریبیوت اضافه کنه؟

جوابش به همون dict مربوط می‌شه ولی بیاین مرحله به مرحله چک کنیم ببینیم چه اتفاقی می‌افته
👇
python courses
‏ولی داستان چیه که ‎#پایتون می‌تونه به صورت دینامیک اتریبیوت اضافه کنه؟ جوابش به همون dict مربوط می‌شه ولی بیاین مرحله به مرحله چک کنیم ببینیم چه اتفاقی می‌افته 👇
‏۱. مثلا آبجکت whatever را فرض کنید که dict هم داره.

۲. حالا ما از 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"
‏بهتره توی کدهای پایتون، به تایپ‌ها هم توجه کنیم

حالا یه سوال:
اگر بخواهیم type hint را برای تابع lambda به کار ببریم، روش پیاده سازی چطور خواهد بود؟

با توجه به این‌که علامت کالن «:» در تعریف lambda معنای خاصی داره و نمی‌تونیم مثل def برای تعریف تایپ ازش استفاده کنیم.

جواب: 👇
‏تصویر پایین، تعریف یک تابع در زبان ‎#پایتون رو نشون می‌ده.
ولی داستان اون آرگومان‌های عجیب و غریب اسلش «/» یا ستاره «*» چیه؟