python courses
69 subscribers
22 photos
2 files
14 links
اینجا دوره های مختلف و تریک های پایتونی رو قرار میدم به مرور
این دوره ها توی آپارات و ویرگول هم انتشار داده میشه!
آپارات:m.farahnak
ویرگول:fhot707
@javadfarah_py:تلگرام من
Download Telegram
‏در زبان ‎#پایتون برای هر کلاسی به صورت پیش‌فرض امکان ساختن 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 برای تعریف تایپ ازش استفاده کنیم.

جواب: 👇
‏تصویر پایین، تعریف یک تابع در زبان ‎#پایتون رو نشون می‌ده.
ولی داستان اون آرگومان‌های عجیب و غریب اسلش «/» یا ستاره «*» چیه؟
‏اگه از ‎#پایتون ورژن 3.8 و یا بالاتر استفاده می‌کنید، می‌تونید تابع‌ها را این جوری هم تعریف کنید
هر چیزی قبل اسلش «/» بیاد، positional argument شناخته می‌شه. یعنی نمی‌تونم موقع callکردن تابع از آرگومان‌های کمتری استفاده کنم. و از طرفی، اجازه هم ندارم از keyword استفاده کنم
‏بعد «/» هر چی بنویسیم، می‌تونه هم positional استفاده بشه هم با اسم یا کلید واژه (به صورت keyword). کاملا اختیاری هست.
ولی این حالت اختیاری بودنش تا زمانی ادامه پیدا می‌کنه که برسیم به آرگومان «*» از اون جا به بعد داستان فرق می‌کنه و «باید» از آرگومان keyword استفاده کنیم
‏آخرش هم می‌تونیم با ** باقی keyword arguemnt ها را داخل یک دیکشنری دریافت کنیم.
‏در زبان ‎#پایتون برای خوانایی بیشتر می‌تونیم اعداد را به این شکل هم تعریف کنیم.
For you Python users who have been unwilling (or unable) to upgrade to version 3, there’s yet another reason to get motivated: python.org has released Python 2.7.18, the absolute last official release for Python 2. 
‏با دستور os.system از کتابخانه os پایتون می‌توانیم دستور‌هایی که در محیط کامندلاین اجرا می‌کنیم را به شکل یک string و به عنوان آرگومان ورودی این تابع در نظربگیریم.

چند مثال‌ برای لینوکس و ویندوز را ببینیم.