Python Hints
8.62K subscribers
170 photos
11 videos
9 files
141 links
Python tips and tricks
The Good, Bad and the Ugly

توی این کانال فقط قرار هست در مورد core python صحبت کنیم.

این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)

Admin: @Abbasi_ai
Download Telegram
Python Hints
LinkedIn URL این کد بصورت آموزشی و async هست باقی مطلب رو روی لینکدین بخونید ...
چندتا از دوستان پیام دادند که چرا از لینکدین پست می‌ذارید و ...
همرو همینجا بذارید (خلاصه که میگن بین پلتفرم‌های مختلف جابجا نکنید مارو)


پست لینکدین جنبه دستاوردی داره
پست‌های کانال جنبه آموزشی داره

برای همین از هم جدا شون می‌کنم، توی پست بالا هم اگر دقت کنید و متن رو بخونید، یکسری مواردی رو گفتم که شما بعنوان برنامه‌نویس پایتون می‌تونید کد بزنید و تست کنید.

مطمئن باشید توی مسیر انجام اون موارد بسیار بسیار مطلب مهم یاد خواهید گرفت، و به همین دلیل هم لینک از لینکدین قرار دادم.
👍263🤪3👏21🙏1🍓1
این ۶ خط کد (البته نه همه‌اش و فقط خط ۶ام) توی ی پروژه خیلی بزرگ ۲ هفته‌اس که مارو درگیر کرده بود و امروز وسط یک کار دیگر به راه حل رسیدم.

اینو جدی میگم که هیچکس؛ نتونسته بود مشکل رو پیدا کنه (حتی گروه مشاورین)
@PyHints
ادامه پست بعدی:
9🤪4🤷‍♂2👍21
Python Hints
این ۶ خط کد (البته نه همه‌اش و فقط خط ۶ام) توی ی پروژه خیلی بزرگ ۲ هفته‌اس که مارو درگیر کرده بود و امروز وسط یک کار دیگر به راه حل رسیدم. اینو جدی میگم که هیچکس؛ نتونسته بود مشکل رو پیدا کنه (حتی گروه مشاورین) @PyHints ادامه پست بعدی:
نمی‌تونم مثال پروژه رو بدون اینکه کل شرایط رو بگم توضیح بدم اما سعی میکنم اونقدر توضیحاتم مفید باشه که اگر بهش برخوردید سریع متوجه بشید.

داستان ازین قرار هست که همه‌ی ما؛ وقتی می‌خوایم تعداد cpu core رو توی کدهای پایتون بدست بیاریم از
os.cpu_count
استفاده می‌کنیم (همینجا بگم که توی همین تحقیقات متوجه شدم این مورد تعداد hyper thread رو بر می‌گردونه)
os.cpu_count
تعداد کل core یا بهتر بگم hyper thread های در اختیار سیستم‌عامل رو برمی‌گردونه؛ اما شرایطی رو فرض کنید که شما حق استفاده از کل core های سیستم رو ندارید؛ تعداد pool ایی که برای multiprocess در نظر می‌گیرید بهم میریزه و سیستم توی زمان peak به فنا میره درحالی که روی سرور تست مطمئن بودید این تعداد یوزر رو باید جواب بده.

ما تقریبا شرایطی مشابه بالا داشتیم و همین باعث می‌شد نتونیم باگ رو پیدا کنیم (سیستم توسعه و تست تمام core ها در اختیار python هست)
اما روی سرور اصلی اینطور نبوده : استفاده از
pid = os.getpid()
len(os.sched_getaffinity(pid))
راه حلی بود که مشکل مارو حل کرد.
os.sched_getaffinity
تعداد core هایی که یک پروسس خاص می‌تونه در اختیار داشته باشه رو برمی‌گردونه.

برای بررسی بیشتر به داکیومنت CPython, لینک زیر مراجعه کنید
stackoverflow


@PyHints

پ.ن : 99.9% شرایط از همون
os.cpu_count
استفاده خواهیم کرد اما خب ما اینجا راجب مباحث ساده و عادی صحبت نمی‌کنیم 😁😎.
👏29👍14🤔3🤪31
Python Hints
LinkedIn URL این کد بصورت آموزشی و async هست باقی مطلب رو روی لینکدین بخونید ...
توی این کد یکی از مواردی که چندین بار ازم پرسیده شده این بخش کد هست :
چیزی که پر واضح هست اینه که به متن‌هایی که توی ترمینال print می‌شه رنگ میده (می‌دونم کلی پکیج آماده هست ولی خب استفاده از اون‌ها جنبه آموزش رو از بین می‌برد)

بطور کلی برای در اختیار گرفتن اتفاقاتی که توی ترمینال میوفته از کدهای
ANSI escape
می‌تونیم استفاده کنیم.

نه تنها برای رنگ، بلکه برای جابجایی cursor، تغییر متن داخل ترمینال و پیاده‌سازی حالتی مثل scroll و ... استفاده میشه

\033[
نشان دهنده این هست که ما می‌خوایم ازین کد‌ها استفاده کنیم و اصطلاحاً بهش
control sequence introducer
گفته می‌شه.

اگر اسکریپت نویسی با پایتون رو بیشتر از
Jupyter notebook, ...
انجام میدید، بهتره با این موارد آشنا باشید شاید vim بعدی رو شما نوشتید.
👍216👎2🌚21
#Quick
از پایتون درست استفاده کنید.

دلیل این اختلاف زمانی و حافظه رو دوستان به خوبی توی کامنت‌ها توضیح دادند پس دیگه من صحبت نمی‌کنم راجبش.

اما غیر از مورد اول :
x1 *= 2

که بهینه ترین حالت محاسبات و استفاده درست از numpy هست (وقتی میخواهید روی آرایه قبلی بنویسید) باقی موارد هر ۲ باعث خطا و terminate شدن کولب شدند.

شاید فکر کنید ۱ میلیارد عدد بزرگی هست :
۱- بستگی به موضوع داره ولی توی دنیای فعلی خیر واقعاً بزرگ نیست
۲- مدل LLAMA 2 (تلفظ : لاما) که چندروز پیش توسط meta معرفی شد کوچکترینش 7 میلیارد و بزرگترینش 70 میلیارد پارامتر داره.
۳- performance
رو همیشه باید توی بدترین حالات محاسبه کرد (برای همین Big O رو یاد گرفتیم)
❤‍🔥29👍20🤪53👎211👏1💘1
یکبار برای همیشه :

اگر کسی با من، طرز بیان من و ... مشکلی داره
می‌تونه از گروه - کانال
Left
بده، و حتماً من رو هم
Block
بکنه.

واسه درآمد‌ زایی کانال نزدم، واسه دیده شدن هم نیازی به این کانال ندارم (چون اصلاً پروژه تو ایران قبول نمی‌کنم)

ولی راجب این موضوعات دیگه پیام ندید؛ ترجیح میدم کانال و گروه حتی ۴۰ نفر باشه اما آدم‌های درست (که حتی خودمم ازشون یاد بگیرم)

پ.ن : این رو میگم، چون ترجیح میدم بجای اینکه انرژی‌ام رو صرف آدم‌های زبون نفهم و دنبال حاشیه کنم ، جواب سوالات کسایی که واقعاً نیاز به کمک دارند رو بدم. ( چون خودمم ی روزی توی این جایگاه بودم و افراد کمی رو برای کمک گرفتن کنارم داشتم)
👍9019👎11🤪6🤔4🌚2🆒2
Python Hints
#Quick از پایتون درست استفاده کنید. دلیل این اختلاف زمانی و حافظه رو دوستان به خوبی توی کامنت‌ها توضیح دادند پس دیگه من صحبت نمی‌کنم راجبش. اما غیر از مورد اول : x1 *= 2 که بهینه ترین حالت محاسبات و استفاده درست از numpy هست (وقتی میخواهید روی آرایه…
#موقت
این پست ی باگ و سوتی داره که متأسفانه کسی متوجه نشد
و خودم الان متوجه شدم و باید بهش اعتراف کنم.

البته بحثی که شده در مورد سرعت و مصرف حافظه کاملاً درست هست ولی خب کد اشتباه داره

تصویر و متن آپدیت می‌شه

مشکل رو ازینجا پیدا کردم که اون
Online Interpreter
قطعاً نباید توانایی محاسبه
100,000,000
رو می‌داشت (دیشب فکر می‌کردم روی 10,000 گذاشتم، تاثیرات شایعه حذف ۴ صفر از پول هست.)
👍14👌2😐2👀2👾21
1690891967408.gif
849.4 KB
این پکیج هم جالب هست،

Pypi Link

البته شخصاً فعلاً کاربرد جدی‌ایی براش نمی‌بینم (ویدئو گویا هست دیگه)
وسط اجرا یادت میوفته ی کاری رو نکردی همون لحظه اضافه می‌کنی

احتمال زیاد پرفورمنس رو خراب می‌کنه

منبع: لینکدین (پروفایل طرف رو گم کردم)

پ.ن : یک کاربرد
Checkpoint
زدن توی تنسورفلو - کراس - پایتورچ می‌تونه باشه ولی موافقش نیستم

اگر یادت هست که اینو بذاری تو for loop پس قطعاً می‌دونی برای checkpoint زدن هست، خب کد رو همونجا آپدیت می‌کنی 😬
واقعاً شخصاً هنوز کاربرد منطقی براش نمی‌بینم
👍212
تغییراتی که به احتمال بسیاری نهایی خواهند بود برای پایتون 3.12 :

Python3.12 what's bew ?

و مواردی که باعث افزایش سرعت خواهند شد.
👍19
Python Hints
تغییراتی که به احتمال بسیاری نهایی خواهند بود برای پایتون 3.12 : Python3.12 what's bew ? و مواردی که باعث افزایش سرعت خواهند شد.
Tokenizer
توی این نسخه روی C نوشته شده همین ی مورد به تنهایی خیلی سرعت رو بالا میبره (البته اینطوری که این زمان روی ماژول‌های متفاوت chain می‌شه و خودشو نشون میده)

حتماً این تغییرات رو بخونید، بخصوص اگر درحال توسعه پکیج هستید

مثلاً f-string فوق‌العاده خوب شده \ ، f-string های تو در تو هم دیگه پشتیبانی میشه و ...
👍173
Python Hints
من محمد عباسی (@abbasi_ai) یک توسعه دهنده پایتون هستم با بیش از ۸ سال تجربه کار با پایتون (البته زمانی که دارم این پست رو می‌نویسم و باقی موارد تجربیاتم هم برای این کانال اهمیتی نداره) سعی می‌کنم نکاتی که فکر می‌کنم مهم هست تغییراتی که توی نسخه‌های اخیر…
#موقت
#Quick

دوستان من لینکدین رو هرروز چک نمی‌کنم مگر اینکه پیام یا کاری داشته باشم
اگر connect request فرستادید و طول کشید برای
Accept
کردن، عذرخواهی‌ می‌کنم 🌹

توی مواردی که نخوام accept بزنم (پروفایل مشخص نیست، از نظر شغلی‌ و ... به هم نمی‌خوریم مثلا مورد داشتیم طرف زده بود مشاور املاک، درخواست داده بود 😂) خودم reject می‌زنم. اما اگر ببینم بدون پاسخ نمی‌ذارم.

این مورد برای پیام‌های تلگرام هم صدق می‌کنه (اگر پیامی رو چندروز ندیدم یک پیام دیگه با متن up بفرستید که پیام بالا بیاد و ببینم)
👍19👌8🗿5🤪21
#خارج_از_بحث

این خیلی بدردم‌ خورد گفتم با شما هم به اشتراک بذارم شاید مشکلات شما رو هم حل کمه
مخصوصاً مورد سوم
Reset Imported Contacts


فقط کافیه وارد
Settings
بشید و متن پایین که با فلش اشاره کردم رو ۲ بار طولانی لمس کنید.

دوستان اشاره کرده بودند شماره مشخص هست 😬
👍143😐1
#Quick

این یکی از Django هست نسخه 3.2 به بعد (من فقط 3.2 و 4.2 رو تست کردم)

یکی از سرویس‌های شرکت رو چون جلوتر از
Sprint

بودم و بسیار بسیار شبیه یکی دیگه از سرویس‌هایی هست که خودم کد زده بودم بجای اینکه طبق معمول پیاده سازی کنم
Async
پیاده‌سازی کردم با اینکه فکر میکردم چون ORM هنوز async نشده و نباید خیلی کمک بزرگی بهم بکنه اما طبق خروجی profiler تقریباً ۲.۲ برابر request بیشتری رو دارم هندل می‌کنم با سخت‌افزار و کانفیگ یکسان.

دوستان یوتیوبر بنظرم، ازین دوره‌ها بسازید.

برای توسعه دهنده‌ها شاید الان خیلی چیز پر دردسری باشه نسبت به موارد دیگه که وجود داره و نیاز به
sync_to_async , ...

ولی قطعاً آینده Django به این سمت هست و برای درآمد بهتر در اون زمان، الان وقت شروع تمرین هست بنظرم
👍267👎1
Python Hints
نحوه استفاده از هوش مصنوعی؛ چندتا از بچه ها بعد از ارائه پیام دادند که یک آموزش از اینکه چطوری با AI الگوریتم و … رو یاد بگیریم بذارید گفتم این نمونه رو بذارم. برعکس این هم هست؛ زمانی که شما یک الگوریتم رو میشناسید ولی مثال برنامه نویسی ازش ندیدید؛ کافیه…
چندساعت قبل یک ملاقات داشتم؛ که توش بحث راجب
PEP703
پیش اومد (همین ۹ روز قبل آپدیت شده) و پروپوزال حذف
GIL
از پایتون هست (در دست بررسی هم هست)

شروع کردم راجبش صحبت کردن؛ ی مقدار که فردی که بحث رو وسط انداخت تعجب کرد بعد یکی از بچه‌ها گفت تعجب نکن محمد همیشه آپدیت هست

خواستم بگم همیشه آپدیت بودن این نیست که برید کل
PEP703
رو بخونید (این اشتباهی هست که خیلی از بچه‌های تازه‌کار می‌کنند و فکر می‌کنند اینطوری سطحشون بالا میره)

فقط باید از ابزار های مناسب استفاده کنید.
من فقط این ۳ تا سوال رو از
chatGPT
پرسیده بودم قبلش (وقتی دیدم صحبت‌ها در موردش داره شروع میشه)

What is PEP703, what are the main problems in the way of PEP703 ?

What are the proposed ways for removing GIL from CPython in PEP703 if any provided ?

Give me a summary of PEP703 for a 5 minute talk about it.

حتی می‌تونستم راجبش تا ۱۵-۲۰ دقیقه بعد لکچر هم بدم :
اول این سوال و بعد هم خوندن بخش‌های مهم پروپوزال PEP703 که هایلایت شده

Give me a summary of PEP703 for a 20 minute talk about it in 4000 words

خلاصه که استفاده درست از ابزارهای موجود بسیار بسیار مهم هست؛ و شما باید این رو هم یاد بگیرید که کجا و چطور از چه ابزاری استفاده کنید.

پ.ن : احتمال داره پایتون 3.13 اولین نسخه‌ای باشه که
--disbale-gil
ارائه خواهد شد و نیازی هم ندارید این مورد رو بخونید (من فقط خواستم ی آدم جوگیر رو ادب کنم)

@PyHints
20👍16👎32👏2👌21💔1🤝1
ی پروژه و پکیج جالب برای ساده‌ کردن
Multiprocessing
در پایتون (شخصاً استفاده نکردم ولی جالب هست بسیار)

Github Link
👍7❤‍🔥21🎃1
#Quick

برای بالا بردن سرعت کدها اولین کاری که می‌کنید اینه که میرید
C
یاد میگیرید ؟

اشتباه نکنید، چیزی که قبل از اون نیاز دارید و ۹۹.۹٪ مشکلاتتون رو حل می‌کنه
Cython

(شاید یک آموزشی هم براش گذاشتم)

برای مثال توی پروژه اخیر، بجای یک سری از پردازش‌های مهم تصویر رو که با
numpy
پیاده سازی شده بود آوردیم روی
Cython (numpy)

زمان اجرا تمام پردازش‌ها قبل از این برای ۱ عکس توی بنچمارک ۵۳ ثانیه بود و بعد از تبدیل به Cython به حدوداً ۱ ثانیه رسید.

خیلی مهمه با همین ابزارهایی که در اختیارتون هست آشنا باشید و بتونید کار کنید.

پ.ن : کتاب بروزی نداریم برای این موضوع متأسفانه ولی یکی از بهترین منابع که یادم هستم (چندسال قبل خوندم؛ با یکی از دوستان)
Cython (A guide for python programmers) by Kurt W.Smith - O'Reilly
بود و البته داکیومنت خود
Cython

حتی یاد گیری مقدماتش هم می‌تونه تا ۴-۵ برابر کدهاتون رو سریعتر کنه
👍44🤯8👌41
Python Hints
موسیقی تقدیم شما بابت 1k شدن کانال توی کمتر از ۱ ماه مرسی از همگی، امیدوارم لذت ببرید.🌹 بازم تاکید می‌کنم share , reference دادن به کانال رو هستم، ولی اگر میخواید مطالب رو کپی هم‌ کنید کپی کاملاً آزاد. مطالب رو ویدئو youtube کردن، کاملاً آزاد. کلا…
☝️☝️☝️☝️☝️☝️

قبلاً هم گفتم حتی استفاده از مطالب بدون رفرنس دادن به کانال هم مجاز هست.

البته بسیاری از دوستان رفرنس می‌زنند (قدردان هستم)
و این مطلب رو مجدد گذاشتم چون بعضی از دوستان پرسیدند توی آموزش می‌تونند استفاده کنند یا خیر .
24👍3👏3
اینم ارزش نگاه انداختن داره :

توجه کنید حالت
Local Mode
داره که وقتی فعال کنید لاگ روی سرورهای خودشون نگه نمی‌دارند و از دیتا برای training استفاده نمی‌شه (مشکل جدی شرکت‌های بزرگ با chatGpt)

Cursor
The Ai First Code Editor
👍11
این رو همین الان توی مصاحبه ازم پرسیدند : (حتی فرصت فکر کردن به راه‌حل و ... هم نداشتم)

البته باید بگم که توی مصاحبه یک حجم بالایی از دیتا بهم داده شد و یک کد با بیش از ۱۰۰ خط
توی این شرکت قرار هست
senior python developer
باشم و حالا میخوان کدهاشون رو optimize و review کنند

تا اول خط ۱۴ من داشتم مثالی مشابه برای شما آماده میکردم؛ و توی ۸ خط من ۶۰٪ کدهای نفر قبلی رو انجام دادم.
استفاده از
match-case / Destructuring / Runtime type checking
۳ تا مفهوم اصلی بود که با این کد نشون دادم بهش مسلط هستم.


پ.ن : isbn رو نباید int در نظر بگیرید (سربار و …) ولی من برای مثال چیز دیگری به ذهنم نرسید برای همین اینطوری در نظر گرفتمش

راستی این یکی از سوالات مصاحبه مرحله دوم بود، مرحله سوم هم که احتمال زیاد
System Design
هست.
👍34822🍾1