من محمد عباسی (@abbasi_ai)
یک توسعه دهنده پایتون هستم با بیش از ۸ سال تجربه کار با پایتون (البته زمانی که دارم این پست رو مینویسم و باقی موارد تجربیاتم هم برای این کانال اهمیتی نداره)
سعی میکنم نکاتی که فکر میکنم مهم هست تغییراتی که توی نسخههای اخیر (از پایتون ۳.۴ به بعد وارد شده و اهمیت بالایی داره و ... رو صحبت کنم)
بیشتر هدف از این کانال، برای خودم به نوعی آرشیوی از موارد و ویژگیهای مهم پایتون هست که راجبش میشه صحبت کرد
ازین به بعد قرار هست اینجا در مورد core python صحبت کنم تا اینطوری بتونم به دوستانم هم کمک کنم و نیازی هم به تکرارهای مجدد نباشه.
هیچکدوم از موارد رو از خودم نمیگم (مگر با #نظر_شخصی علامت گذاری بشه) منابع همه صحبتها داکیومنت اصلی پایتون و کتابهای معروف پایتونی هست.
LinkedIn Profile
@pyHints
یک توسعه دهنده پایتون هستم با بیش از ۸ سال تجربه کار با پایتون (البته زمانی که دارم این پست رو مینویسم و باقی موارد تجربیاتم هم برای این کانال اهمیتی نداره)
سعی میکنم نکاتی که فکر میکنم مهم هست تغییراتی که توی نسخههای اخیر (از پایتون ۳.۴ به بعد وارد شده و اهمیت بالایی داره و ... رو صحبت کنم)
بیشتر هدف از این کانال، برای خودم به نوعی آرشیوی از موارد و ویژگیهای مهم پایتون هست که راجبش میشه صحبت کرد
ازین به بعد قرار هست اینجا در مورد core python صحبت کنم تا اینطوری بتونم به دوستانم هم کمک کنم و نیازی هم به تکرارهای مجدد نباشه.
هیچکدوم از موارد رو از خودم نمیگم (مگر با #نظر_شخصی علامت گذاری بشه) منابع همه صحبتها داکیومنت اصلی پایتون و کتابهای معروف پایتونی هست.
LinkedIn Profile
@pyHints
🔥51❤13👍9👎4☃1
Python Hints pinned «من محمد عباسی (@abbasi_ai) یک توسعه دهنده پایتون هستم با بیش از ۸ سال تجربه کار با پایتون (البته زمانی که دارم این پست رو مینویسم و باقی موارد تجربیاتم هم برای این کانال اهمیتی نداره) سعی میکنم نکاتی که فکر میکنم مهم هست تغییراتی که توی نسخههای اخیر…»
وقتی صحبت از ارسال و دریافت دیتا میشود یکی از مواردی از همون ابتدا به ذهن میرسه انتخاب
درست هست؛ اگر توسعه دهنده وب باشید قطعا همون اول یاد
میوفتید (امن و مناسب) اما گزینههای دیگری هم هست که توی پروژههای مختلف استفاده میشه مثل
مشکل اصلی که با
بصورت دیفالت
اما مشکل اینجاس که
تصویر پیوست شده؛ اگر قرار هست از
GitHub issues
@PyHints
Serializer
درست هست؛ اگر توسعه دهنده وب باشید قطعا همون اول یاد
JSON
میوفتید (امن و مناسب) اما گزینههای دیگری هم هست که توی پروژههای مختلف استفاده میشه مثل
YAMLکه بیشتر دوستان DevOps کار یا برنامهنویسهای اون سمت باهاش کار میکنند؛ و یا مثلا:
Pickle
که توی AI و DataScience خیلی طرفدار داره متاسفانه (استفادهاش توی تیم من ممنوع هست)مشکل اصلی که با
YAML, Pickle
وجود داره بخصوص Pickle
امنیت هست.بصورت دیفالت
YAML
, Pickle وقتی باهاش Serialized Dataرو باز میکنید اگر حاوی دستورات سیستمی هم باشه اونهارو بصورت کامل اجرا میکنه برای همین هست که توی
PyYaml
وقتی کدی قرار هست برای Production
استفاده بشه باید از yaml.safe_loadاستفاده کنید.
اما مشکل اینجاس که
safe_load
کلاسهای کاستوم رو نمیشناسه راه حل :تصویر پیوست شده؛ اگر قرار هست از
YAML
توی پروژه استفاده کنید حتما از safe_loader
استفاده کنید load
, full_loader
, ... امن نیست و این مورد یک باگ کاملا شناخته شده هست.GitHub issues
@PyHints
👍25👌5❤4❤🔥1☃1👻1
یک نمونه exploit خیلی ساده برای تست؛ سورس کد رو گذاشتم که خودتون اجرا کنید و مطمئن باشید امن هست.
اما بجای
هیچوقت هیچ فایل
@PyHints
اما بجای
ls
میشد هرکار دیگری هم کرد یا خوندن passwd
میشد خیلی کارهای دیگهای کرد.هیچوقت هیچ فایل
Pickle
ایی رو از کسی قبول نکنید اگر قبول کردید روی سیستم اجرا نکنید.@PyHints
👍35❤🔥3☃2❤2👾2👌1
این کد که احتمالاً بسیار هم میبینید و استفاده میکنید
۲ تا باگ داره، که ۱ مورد میتونه حتی شمارو توی مصاحبه رد کنه
میتونید باگهارو پیدا کنید ؟
@PyHints
۲ تا باگ داره، که ۱ مورد میتونه حتی شمارو توی مصاحبه رد کنه
میتونید باگهارو پیدا کنید ؟
@PyHints
👀20✍6🤔3❤🔥2👍2❤1☃1👌1😐1
Python Hints
این کد که احتمالاً بسیار هم میبینید و استفاده میکنید ۲ تا باگ داره، که ۱ مورد میتونه حتی شمارو توی مصاحبه رد کنه میتونید باگهارو پیدا کنید ؟ @PyHints
اول راجب خود
نحوه نمایش پارامترهای ورودی هست که مشخص نیست از چه تایپی هست و شما نمیتونید با کپی کردن خروجی یک object جدید بسازید که خب خود
پس برای رفع این باگ کاری که باید بکنید استفاده از :
@PyHints
__repr__بگم برای دوستان تازهکار، در صورتیکه وجود نداشته باشه توی خط 11 و بعد از اجرای کد چیزی که برای شما توی کنسول نمایش داده میشه آدرس حافظه اون object هست مثلاً:
<main.Person object at 0x7f894c576650>که خب اصلا چیز خوبی نیست، به لطف
__repr__شما میتونید خروجی بهتری داشته باشید مثلاً توی این تصویر خروجی بصورت زیر هست :
Person(name=Mo Abbasi, age=60)حالا بریم سراغ باگها؛ باگ اول که خب سادهتر هست :
نحوه نمایش پارامترهای ورودی هست که مشخص نیست از چه تایپی هست و شما نمیتونید با کپی کردن خروجی یک object جدید بسازید که خب خود
__repr__
رو میبره زیر سوالMo Abbasiاسترینگ نیست اینجا.
پس برای رفع این باگ کاری که باید بکنید استفاده از :
!rهست ینی خط 7 میشه:
return f"Person(name={self.name!r}, age={self.age!r})"اگر تا به حال اینطوری تعریف نمیکردید، تعریف
__repr__
شما طبق استاندارد نبوده.@PyHints
👍56👌6❤4☃2❤🔥1
Python Hints
این کد که احتمالاً بسیار هم میبینید و استفاده میکنید ۲ تا باگ داره، که ۱ مورد میتونه حتی شمارو توی مصاحبه رد کنه میتونید باگهارو پیدا کنید ؟ @PyHints
ولی باگ دوم که من حتی توی سورس کد فریمورکها و کتابخانههای معروف پایتون هم زیاد دیدم به راحتی میتونه توی مصاحبههای اولیه اوضاع رو بر علیه شما بکنه
مشکل باز هم توی این خط هست :
راه حل :
توی تصویر این پست هم میتونید ببینید :
https://t.iss.one/pyHints/7
@PyHints
مشکل باز هم توی این خط هست :
return f"Person(name={self.name!r}, age={self.age!r})"
اگر دقت کنید اسم کلاس hard code شده ینی اگر بعد از مدتی که پروژه بزرگ شد بجای کلاس Person
از مثلا Student
استفاده بشه و فراموش کنید که __repr__
رو تغییر بدید؛ بوقت دیباگ کردن کد باعث سردرگمی بزرگی میشه؛راه حل :
return f"{type(self).__name__}(name={self.name!r}, age={self.age!r})"
که خب type(self)
میگه که ی instance
از کلاس Person
هست و وقتی __name__
رو میگیرم دقیقا اسم کلاس رو برمیگردونه ینی Person
هر تغییری هم که روی اسم کلاس اعمال بشه هیچ نیازی به تغییر __repr__نیست.
توی تصویر این پست هم میتونید ببینید :
https://t.iss.one/pyHints/7
@PyHints
👍76❤🔥6👌3☃2❤1👎1🆒1
Python Hints
بنظرتون باگ این سورس کد کجاست ؟ @PyHints
این یک باگ کاملا شناخته شده و کاملا تکراری هست؛ ممکنه توی مصاحبههای مختلف هم تجربهاش کرده باشید یا دیده باشید.
یک نمونه مصاحبه Amazon بوده برای پایتون (طرف از یک زبان برنامه نویسی دیگه اومده بود سمت پایتون و دنبال کار بود)
اول برای دوستان تازه کار:
و
البته اینجا نه بخاطر باگی که وجود داره
اگر بخوام خیلی ساده توضیح بدم :
مسئله اصلی اینجاس که نسخه پایتونی که بصورت دیفالت از سایت پایتون دانلود میشه روی
به همین دلیل وقتی از dict ارث بری بکنید احترامی برای متدهای builtin قائل نمیشه (چون توی
راه حل :
@PyHints
یک نمونه مصاحبه Amazon بوده برای پایتون (طرف از یک زبان برنامه نویسی دیگه اومده بود سمت پایتون و دنبال کار بود)
اول برای دوستان تازه کار:
__setitem__
وقتی اجرا میشه که میخواهید یک key - value رو داخل dictionary بریزیدو
__getitem__
وقتی اجرا میشه که میخواهید یک مقدار رو از دیکشری بخونید. البته اینجا نه بخاطر باگی که وجود داره
اگر بخوام خیلی ساده توضیح بدم :
مسئله اصلی اینجاس که نسخه پایتونی که بصورت دیفالت از سایت پایتون دانلود میشه روی
C
کد زده شده و مواردی مثل str, dict, list
از کدهای C
برای اجرا استفاده میکنند. به همین دلیل وقتی از dict ارث بری بکنید احترامی برای متدهای builtin قائل نمیشه (چون توی
C
پیاده سازی شده و کد پایتون شما قابلیت overwrite شدن روی کد C
رو نداره) پس درنهایت چیزی رو میگیرید که توی C
و برای خود پایتون دیکشنری پیاده سازی شدهراه حل :
@PyHints
👍24❤2😱2❤🔥1✍1☃1👌1
توی پایتون ماژولی هست به اسم
رو ندارید باید از
استفاده کنید.
@PyHints
collections
کاربردهای بسیاری داره که درآینده ممکنه بررسی کنیم اما چیزی که ما الان نیاز داریم from collections import UserDict
همیشه یادتون باشه وقتی قراره یک کلاس کاستوم برای نوع داده dict بنویسید؛ حق استفاده از dict
رو ندارید باید از
UserDict
استفاده کنید.
@PyHints
👍36❤5☃2❤🔥2😱2👌1
#جواب_سوالات_پرتکرار
چندتا نکته همین اوایل بگم که بسیار سوال شده :
۱- دوره آموزشی:
شخصاً هیچ دوره آموزشی ندارم، هیچ آموزشگاهی تدریس نمیکنم و هدفم از کانال هم پول درآوردن نبوده پس کلاس خصوصی هم ندارم
۲- من هیچ دوره آموزشی رو تأیید نمیکنم دورههای آنلاین و رایگان بسیار بسیار خوبی وجود داره برای پایتون که همون موارد کفایت میکنه (فقط باید یاد بگیرید هر خط کدی که میزنید و میخونید دقیقاً چیکار میکنه که این یک عادت شخصی هست)
۳- خیلی از دوستان راجب فعال کردن کامنت یا ایجاد گروه گفتند، شخصاً موافقم که وجودش کمک کننده هست ولی همونطور که تو خصوصیها گفتم :
گروه زدن یا فعال سازی کامنت مسئولیتهای بسیاری داره که متأسفانه الان شخصاً فرصت رسیدگی بهش رو ندارم.
۴- راجب درخواست roadmap , ... کانالهای تخصصی کاری که میخواهید انجام بدید رو بخونید.شخصا فقط و فقط اینجا از Core Python صحبت خواهم کرد.
۵- کانال یوتیوب هم ندارم، با اوضاع اینترنت در ایران خیلی از عزیزان (بخصوص تازهکار) متاسفانه دسترسی به اینترنت براشون دشوار هست.
ازین گذشته، علاقه ندارم برای چندتا نکته کوچک (البته مهم) چندین دقیقه وقت بگیرم و حاشیه سلام علیکم برم فعلا :
پیام متنی و عکس داره کارمون رو راه میندازه و چون محدودیت هم داره مجبورم خیلی خلاصه توضیح بدم
۶- برای دوستانی که گفتند دنبال مطالب این چنینی هستند که توی دورههای آموزشی پیدا نمیشه، اول اینکه هیچوقت توقع نداشته باشید که دوره آموزشی جایگزین کتاب بشه برای شما
منو یاد آدمایی میندازه که بهشون میگم آخرین کتابی که خوندی چی بوده میگه من کتاب نمیخونم یوتیوب و اینستاگرام اشعار ٫ جملات مهم و زیبا رو میبینم.
کتابهایی که هر توسعه دهنده پایتون حتماً حتماً حتماً بعد از دوره مقدماتی و چندماه تمرین باید بخونه (که هزاران بار هم بهش اشاره کردم) :
Fluent Python
Python Concurrency
High Performance Python
Cpython Internals
این موارد حداقل مواردی هست که یک توسعه دهنده برای دنبال کردن مسیر Senior شدن توی پایتون باید بخونه
۷- تبلیغات و ... نداریم و نخواهیم داشت (از حوصله همه خارج هست)
۸- معرفی کانال و ... هم نداریم، مگر اینکه صاحب کانال رو بشناسم و بدونم هدفش درست هست.
یا اینکه خودم چندسالی دنبال کننده کانال و مطالب باشم و مطمئن (همونطوری که تا کتابی رو نخونم معرفی نمیکنم)
۹- لطفاً روی پستها
Reaction
داشته باشید که بدونم وضعیت چطور هست (حداقل تا راهاندازی گروه یا بخش کامنت)
@PyHints
چندتا نکته همین اوایل بگم که بسیار سوال شده :
۱- دوره آموزشی:
شخصاً هیچ دوره آموزشی ندارم، هیچ آموزشگاهی تدریس نمیکنم و هدفم از کانال هم پول درآوردن نبوده پس کلاس خصوصی هم ندارم
۲- من هیچ دوره آموزشی رو تأیید نمیکنم دورههای آنلاین و رایگان بسیار بسیار خوبی وجود داره برای پایتون که همون موارد کفایت میکنه (فقط باید یاد بگیرید هر خط کدی که میزنید و میخونید دقیقاً چیکار میکنه که این یک عادت شخصی هست)
۳- خیلی از دوستان راجب فعال کردن کامنت یا ایجاد گروه گفتند، شخصاً موافقم که وجودش کمک کننده هست ولی همونطور که تو خصوصیها گفتم :
گروه زدن یا فعال سازی کامنت مسئولیتهای بسیاری داره که متأسفانه الان شخصاً فرصت رسیدگی بهش رو ندارم.
۴- راجب درخواست roadmap , ... کانالهای تخصصی کاری که میخواهید انجام بدید رو بخونید.شخصا فقط و فقط اینجا از Core Python صحبت خواهم کرد.
۵- کانال یوتیوب هم ندارم، با اوضاع اینترنت در ایران خیلی از عزیزان (بخصوص تازهکار) متاسفانه دسترسی به اینترنت براشون دشوار هست.
ازین گذشته، علاقه ندارم برای چندتا نکته کوچک (البته مهم) چندین دقیقه وقت بگیرم و حاشیه سلام علیکم برم فعلا :
پیام متنی و عکس داره کارمون رو راه میندازه و چون محدودیت هم داره مجبورم خیلی خلاصه توضیح بدم
۶- برای دوستانی که گفتند دنبال مطالب این چنینی هستند که توی دورههای آموزشی پیدا نمیشه، اول اینکه هیچوقت توقع نداشته باشید که دوره آموزشی جایگزین کتاب بشه برای شما
منو یاد آدمایی میندازه که بهشون میگم آخرین کتابی که خوندی چی بوده میگه من کتاب نمیخونم یوتیوب و اینستاگرام اشعار ٫ جملات مهم و زیبا رو میبینم.
کتابهایی که هر توسعه دهنده پایتون حتماً حتماً حتماً بعد از دوره مقدماتی و چندماه تمرین باید بخونه (که هزاران بار هم بهش اشاره کردم) :
Fluent Python
Python Concurrency
High Performance Python
Cpython Internals
این موارد حداقل مواردی هست که یک توسعه دهنده برای دنبال کردن مسیر Senior شدن توی پایتون باید بخونه
۷- تبلیغات و ... نداریم و نخواهیم داشت (از حوصله همه خارج هست)
۸- معرفی کانال و ... هم نداریم، مگر اینکه صاحب کانال رو بشناسم و بدونم هدفش درست هست.
یا اینکه خودم چندسالی دنبال کننده کانال و مطالب باشم و مطمئن (همونطوری که تا کتابی رو نخونم معرفی نمیکنم)
۹- لطفاً روی پستها
Reaction
داشته باشید که بدونم وضعیت چطور هست (حداقل تا راهاندازی گروه یا بخش کامنت)
@PyHints
❤228👍51❤🔥7👏4☃3👾3👌2