Python Hints
رفتن به کانال در Telegram
Python tips and tricks The Good, Bad and the Ugly توی این کانال فقط قرار هست در مورد core python صحبت کنیم. این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار) Admin: @Abbasi_ai
نمایش بیشتر9 590
مشترکین
+424 ساعت
+727 روز
+21230 روز
آرشیو پست ها
9 599
هرکسی گوه غزه رو خورد اینو بزنید تو صورتش!
بعد از این همه جنگ و بزرگنمایی، فقط ۲۰٪ کودکان غزه سو تغذیه دارند
ولی از طرفی در ایران
۵۴٪ بچههای سیستان و بلوچستان سو تغذیه دارند
اون حرومزادههایی که غزه از دهنشون نمیوفته یک کامنت هم برای بچههای سیستان و بلوچستان ندارند!
آره عزیز؛ حتی توی این همدردی هم به فکر وام دولتی و پشتیبانی حکومتی هستید.
لینک خبر رکنا
9 599
#موقت
اگر ۳ تا کتاب لازم باشه (۸۰۰ صفحه) تا فقط ۱ نکته جهت بهبود پروژههام یاد بگیرم
کاملاً خوشحال خواهم بود!
خلاصه که راضی شدم 👌
حیف توی کتاب راجبش توضیح نداده بود و فقط ابزار رو اسم برده بود (اگر کسی گیتهابش رو چک نکنه نمیدونه پروژهاش چیکار میکنه)
9 599
خروجی این ۳ تا کتاب؛
آشنایی من با یک پروژه بود :
GitHub Page
کاری که میکنه اینه؛ بهش
Swagger رو میدید یا هر داکیومنتی که با استاندارد OpenAPI هست و بصورت خودکار با حالات مختلف تستش میکنه !
اگر وارد پروژهای شدید که تست نویسی نداره؛ یا اینکه برای قدم آخر و اطمینان بیشتر میخواید تست نهایی هم داشته باشید
بنظرم چیز خوبی هست👌
یادتون نره Property Testing آخرین گزینه هست؛ حتماً خودتون باید تست نویسی داشته باشید (خواستم اسمش رو بدونید اگر تو مصاحبهای پرسیدند ازتون)9 599
نمیدونم چرا ولی خیلیها پیام دادید کتاب برای
fastapi هم معرفی کنم!
برای خودمم نیاز بود یک کتاب خوب تو زمینه FastApi پیدا کنم برای معرفی؛ برای review مطالب یکی از دوستان هم اینکار رو زودتر شروع کرده بودم (۲ هفته قبل).
تا اینجا ۳ تا کتاب رو خوندم که بنظرم هیچکدوم با ارزش نبود.
امیدم به ۲ تا کتاب آخر هست؛ (البته اینها کتابایی هست که آپدیت شده ۲۰۲۵-۲۰۲۴)
فعلاً پیشنهادم همون داکیومنت خود FastApi هست و چیز بهتری براش ندیدم و ندارم!
فکر میکنم این موج رفتن سراغ FastApi بخاطر LLM, Agent ها باشه.
حواستون باشه Fastapi به خودی خود مشکلات Sync, Async شمارو حل نمیکنه
پروفایلینگ فراموش نشه 👌9 599
اگر
Async کد میزنید توی پایتون
بهترین خبری که راجب python3.14 میتونم بهتون بدم این بخش از تغییرات هست :
What is new in python3.14
خیلی اتفاقی داشتم دنبال یک تکنیک برای درک باگ کدم میگشتم که یک پست روی Medium دیدم (پست خوب توضیح نداده بود) برای همین سرچ کردم و دیدم python3.14 این ویژگی رو داره
uv python install 3.14
بنظرم این خیلی اتفاق قشنگی هست.9 599
توی گروه صحبت شد؛ یک کتاب برای تست نویسی توی پایتون!
هرچی فکر کردم کتابی بهتر از
Python Testing with pytest, 2nd ed.توی ذهنم نیومد. چون دیدم توی لیست کتابها برای تست نویسی کتاب معرفی نکردم گفتم اینجا هم بذارم!
9 599
با socketify تازه آشنا شدم؛
دیروز دیدم (توی میت) همکارم داشت روش کار میکرد.
شخصاً به کارم نمیاد فعلا اما، بنچمارکهای جالبی ازش دیدم!
GitHub
9 599
#کتاب
#Book
تابستون شده و کلی دانشجو/دانشآموز پر انرژی پیام دادند برای یادگیری لینوکس کتاب معرفی کن.
و خب چی بهتر از کتاب مقدس ؟ 😁
The Linux Bible
اضافه کنم تا نیومدید بمبارونم کنید:
کلمه Bible توی کتابای فنی به منظور مقدس و ... نیست و بیشتر منظور این هست که کتاب طبق ادعا نویسنده و انتشارات کاملاً جامع و کامل هست ۰ تا ۱۰۰.
من اولین بار نسخههای قدیمیتر این کتاب رو ۱۳-۱۴ سال پیش خوندم؛ و بعد با کتابهای
RedHat آشنا شدم.
هنوزم بنظرم یکی از بهترینهاس.
برای دوستانی که با کتابهای Sander van Vugt لینوکس رو شروع کردند (قبلتر پیشنهاد دادم بهشون برای آزمون ردهت) نیازی به خوندن این کتاب نیست ولی چون اون مباحث چندین کتاب میشه طبق آزمون و این کتاب جامع هست برای همین به دانشجوهایی که آزمون و سرور ادمین شدن هدف فعلی نیست؛ این کتاب رو پیشنهاد میدم.9 599
#تجربه #مصاحبه
بعد از خیلی سال دوباره یک مصاحبه خیلی مهم دارم با یک شرکت بزرگ. برای همین چند روزی هست که روزی ۱-۲ ساعت دارم تمرین انجام میدم (خیلی وقت بود ازینکارا نکرده بودم ولی حالا که وقت دادن قبل مصاحبه بد نیست تمرین کنم)
سوالاتی که توی مصاحبههای خوبم تجربه کردم و بنظرم سوالات ارزشمندی بوده رو دارم تمرین میکنم و البته بحثهایی که بعدش اومده.
بله من سوالات و بحثهای مهم رو مینویسیم و نگه میدارم؛ شما هم باید اینکار رو بکنید. (قبلاً توضیح دادم)
امروز رسیدم به اولین سوالم؛ با یکی از شرکتهای
FAANG خیلی سال پیش بود و سوال مرحله اول (دقیقاً چهره مصاحبه کننده و استرس خودم و ... همرو یادم هست.)
گفتم سوال رو اینجا هم بذارم :
سیستمی رو پیاده سازی کن که بعنوان ورودی یک استرینگ از محاسبات ریاضی بصورت infix دریافت کنه؛ بتونه خروجی رو بصورت postfix, یا prefix (هرکدوم راحتتری) تحویل بده یا اگر object اون کلاس صدا زده شده؛ با استفاده از postfix/prefix پیادهسازی شده محاسبات رو انجام بده و خروجی رو تحویل.
من اینو یادمه که با postfix حل کردم چون راحتتر بود (stack) :
اما چندتا چیز رو بررسی میکرد:
۱- چون صحبت از object شد باید. OOP میبود
۲- حتماً باید __call__ رو براش پیادهسازی میکردم که callable باشه (این یعنی داندر متودها رو میشناسم)
۳- سراغ پیادهسازی سادهتر رفتم (تصمیم گیری و شناخت مسأله، البته توضیح هم دادم چرا بنظرم سادهتر هست و ...)
۴- استفاده از stack که بعد خود stack رو پیادهسازی کردم (آشنایی با DS, حتی بحث هم کردم بین LinkedList, Array چرا و کدوم رو انتخاب میکنم برای ساخت stack)
و موارد دیگهای که بعدش اومد و بحث شد؛ امروز دارم اینو تمرین میکنم با تست کیسهای سختتر. یاد اون مصاحبه افتادم و چون سوال خوبی بود برای تمرین گفتم اینجا هم بذارم.
پ.ن؛ اگر خواستید پیادهسازی کنید این حالات رو تست کنید (تو مصاحبه از مصاحبه کننده باید پرسیده بشه)
۱- سیستم ورودی invalid داشته باشه؛ خروجی برای هر دو حالت None هست
۲- سیستم infix برای اولویت دادن به محاسبات از () ممکنه استفاده کنه
۳- سیستم فقط از ۴ عمل اصلی + پرانتز پشتیبانی خواهد کرد
۴- ورودیهای عددی ممکنه float/int باشه
۵- ممکنه بین کاراکترها space باشه یا نباشه
"17+3.5" or "17 + 3.5"
هر دو درست هست.9 599
تقریبا روزی ۱ دونه دارم حل میکنم و لذت بخش هست.
من به سادهترین روشی که به جواب برسه دارم حل میکنم مسئله رو و مسئله ها تا اینجا ساده بوده برام اما ...
بهترین بخشش برای من این هست که بعد از حل هر مسئله میتونم راه حلهای باقی آدمها رو هم ببینم و مقایسه کنم.
خیلی ساده با مثال کاربردی چیزایی که یادم رفته بود دوباره برام یادآوری میشه مثلا توی یکی از چالشهای قبلی یکی اومده بو برای تمیزی کد از
from itertools import groupby
استفاده کرده بود؛ با اینکه میشناختم این متد رو ولی چون خیلی وقت بود بکارم نیومده بود کامل فراموش کرده بودم اما حالا با مثال بهم یادآوری شده و یادداشت هم کردم که بعد از چندبار مرور به ذهنم برگرده.
خود سوالات و حل کردنشون بجای خودش؛ بخش راهحلهای clever, best practice که بعد از حل بهمون نشون میده واقعا عالیه؛ کاملا در تلاشم که حداقل روزی ۱ مورد رو حل کنم.9 599
قبلاً راجب توجه به یک سری نکات تو مصاحبه صحبت کردم؛ یکی از دوستان مصاحبه داشت و کدی که برای مرحله اول زده بود رو نشونم داد.
بهش گفتم امید زیادی به قبولی نداشته باشه!چرا ؟ شرکتهای زیادی هستند که توی مرحله اول مصاحبه از شما سوالات بنظر ساده میپرسند؛ شخصاً بعضی وقتا این کار رو میکنم بخصوص وقتی تعداد رزومهها بسیار زیاد هست. ازین دوستمون پرسیده شده بود که؛ یک نوع خاص از آرایه رو پیادهسازی کنه برای سادگی من همون آرایه مرتب درنظر میگیرم. شاید سوال بشه؛ چرا باید سوال به این سادگی بپرسند توی مصاحبه ؟ هزاران هزار پیادهسازی از آرایه توی اینترنت هست و برای خیلیها پیادهسازیش شاید ۲۰ دیقه هم نکشه (اگر تایپ کردنش کند هم باشه) مسئله همینجا هست؛ چون پیادهسازی زیادی داره و همه هم خوندند خیلیها یک کدی رو حفظ میکنند و همین حفظ کردن باعث میشه توی مصاحبه فقط تایپ انجام بدند که مشکل اصلی به وجود میاد. توی مثال آرایه مرتب فرض کنید به شما بگم، روی سیستم ۸ بیتی قراره آرایه شما استفاده بشه! بعد کمی جلوتر بگم که قابلیت سرچ رو براش پیادهسازی کنید؛ اگر درساتو خوب خونده باشی و کدها رو خوب حفظ کرده باشی؛ میدونی چون آرایه مرتب هست توی جستجو میتونی از
binary search استفاده کنی.
یک بخشی داریم توی جستجوی باینتری که باید وسط آرایه رو پیدا کنید، ۹۹٪ مینویسند (توی دورههای آموزش و کتابهای معروف ببینید) :
(Low + High) // 2
که خب وسط دوتا عدد رو پیدا میکنه خیلی هم عالی! ولی اگر توی مثالی که من زدم اینو بنویسید از مصاحبه حذف میشید و میرم سراغ نفر بعدی (وقتی تعداد رزومهها زیاده ازین تکنیک استفاده میکنم شخصاً؛ تا برای مرحله دوم و سوم مصاحبه بجای ۵۰۰ نفر با ۱۵ نفر مصاحبه کنم)
حالا چرا با این مدل میانگین گیری حذف میشید ؟ overflow
فرضیه مسئله من این بود کد روی سیستم ۸ بیتی اجرا بشه؛ ۸ تا بیت یعنی اعداد ۰ تا ۲۵۵ (چون ایندکس رو داریم صحبت میکنیم و منفی نداره) اگر مقدار high , low توی یکی از حالات جمعش بیشتر از ۲۵۵ بشه؛ کل محاسبات شما اشتباه میشه و آرایه شما بعد از اولین دیلیت هم دیگه ولید نخواهد بود.
((high - low) // 2) + low
یکی از راهکارهاش هست.
ولی یک سری نکات ریز این چنینی و موارد دیگه که قبلتر صحبت کردیم (نحوه نوشتن repr, iter, ...) بسیار مهم میشه!
همیشه به دوستان خودم میگم؛ وقتی دیدی سوال مصاحبه اول خیلی ساده هست حتماً بیشتر بترس ! چرا ؟
چون احتمال و درصد حذف بسیار بسیار بالاس؛ و ممکنه اول اشتباه، آخرین اشتباه باشه.
شخصاً وقتی سوالات مصاحبه خیلی سخت میشه، خیلی استرس کمتری دارم9 599
راجب این موضوع و
leetcode :
یک سری مشکلات رو با leetcode و یا data structure, algo این چندروز مطرح کردید که منطقی هم بود (منم دنبال راهکار بودم)
۱- وقتی تگهای سوال + سطحش رو میبینم میفهمم چطوری باید حلش کرد ولی اگر اونها نباشه تو بعضی سوالات کامل میمونم.
۲- خیلی از سوالات leetcode مفهومی هست؛ دقیقا هم نمیدونم بدرد کارم میخوره در آینده یا نه و همین بیانگیزهام میکنه (به این دسته دوستان گفتم که منم همین مشکل رو دارم با leetcode)
۳- سطح بندی leetcode که باعث میشه خیلیها جلوی خودتون رو بگیرید
مورد آخر رو اول بگم؛ تکنیک پست قبلی خیلی مهم هست از هر سطح و موضوع باید یک تعداد مشخصی سوال رو انتخاب کنید برای حل کردن؛ اینکه تو ذهنتون به این فکر میکنید :
نکنه فلان سوال که سطح ساده/متوسط هم داره یک نکته جدید داشته باشه نسبت به این یکییک اشتباه بزرگ هست. به خودت سخت نگیر؛ مطمئن شو مفاهیم رو یاد گرفتی. اما برای مورد دوم و اول؛ چندروزی بود که داشتم جستجو میکردم و نهایتا یک سایت رو پیدا کردم : MyLink فرقش چیه ؟ سوالاش کاربردی تر هست؛ میتونید جوابهای دیگران رو ببیند. براش الگوریتم و زمان و ... مهم نیست و مهم حل کرده مسئله هست که همین چون ذهن رو آزاد میکنه باعث میشه بیشتر خوش بگذره (البته خیلی هم کد داغون نمیتونید بزنید چون تهش تست اجرا نشده؛ زمان تموم میشه) وقتی مسئله رو حل کردید؛ براساس رای دیگران میتونید جوابهای رو ببیند:
best practice, clever, ...دسته بندیهایی هست که وجود داره. راجب سطح سوالات: موقع ثبتنام سطح فعلی و توانایی و زبانی که میخوای تمرین کنی رو ازت میپرسه؛ بعد براساس اون فیلدهایی که پر کردی سوالات رو بهت نشون میده. مثلا دسته بندی :
Fundamental, Rank-Up, Practice and Repeat
وجود داره براش.
خلاصه لزوما ساختمان داده و الگوریتم نیست بلکه تمرین بهتر شدن توی زبان برنامهنویسی هست که انتخاب کردید و درنهایت سوالاش خیلی بدرد مصاحبه میخوره (چندتاییش رو برداشتم)9 599
دوستان libgen.is هنوز فعال هست اما ممکنه بعضی ISP ها برخی از دامنههای libgen رو بلاک کنند.
با سرچ میتونید دامنههای مختلفش رو پیدا کنید؛ فقط حواستون باشه گوگل خیلی سرچ انجین خوبی برای این موارد نیست و حتما هم باید Safe Search اون رو خاموش کنید.
دامنه libgen.li و libgen.gs رو تست کردم و بلاک نشده.
ولی برای جستجو بهتر:
duckduckgo.com
yandex.com
موتور جستجوی بهتری هستند.
9 599
نظرم روی سایت قبلی:
سایت خوبی هست؛ اما من طرفدارش نیستم.
احتمالا قبل از خواب بهش نگاه کنم؛ یا اینکه فقط بپرم و سوالاش رو حل کنم.
برای کسی که تازه وارد هست سایت خیلی خوبیه (مخصوصا اگر روزی ۱۰ دقیقه بیشتر نمیخواد توی یک موضوع جدید وقت بذاره)
اما شخصا چون یادگیری با سرعت بالا رو ترجیح میدم این سایت جلوم رو میگیره؛ سعی میکنم چندروز دیگه هم دنبال کنم مطالبش رو تا نظر دقیقتری بدم.
9 599
پرسیدید؛ چرا
AND انجام شده؟
هرعددی نهایتاً بصورت binary توی کامپیوتر ذخیره میشه مثلاً 10 میشه (۸بیتی در نظر بگیریم)
00001010
یا برای 5 میشه
00000101
اولین عدد سمت راست همیشه 2⁰ رو ضربدر خودش میکنه تا به دسیمال همون سیستم عددی خودمون تبدیل بشه.
2⁰=1
هست، پس اگر سمت راستی ترین بیت 1 باشه اون عدد فرد هست.9 599
اگر خواستید تفاوت بیشتری ببینید و تمرین کنید؛ روی پکتهای
DNS کار کنید.
codecraftersیک تسک براش داره (قبلا معرفی شده) و سعی کنید روی اونها کار کنید. در نهایت برای یادگیری این تریکها (چون میدونم میپرسید) میتونید راجب
Competitive Programming بخونید؛ مقدماتی هست این مباحث ولی بیشتر اونجاها بصورت تریک گفته میشه وگرنه که Computer Science درس اول راجب سیستم اعداد اینارو داریم.9 599
یک ابزار داریم (روی
Rust) که توی چندتا بخش نیاز به پردازش یک سری header های درخواستی که میاد داره.
یا مثلا بعضی جاها کاربر میتونه permission هارو باهاشون کار کنه و ...
همیشه خیلی سریع پردازش انجام میشد و تمام؛ دیروز یکی از مشتریها اعلام کرد که ابزار خیلی کند شده (برای یک سرور خاص البته) بعد از کلی بررسی متوجه شدم :
تعداد فایلهایی که روی این سرور دارند خیلی خیلی زیاد هست ولی چون حجم خیلی خیلی پایینی داره اکثرا و توی یک هارد کوچیک جا شده؛ مشتری توقع داره سرعت بالاتر باشه.
نسبت به سروری که مثلا ۵۰۰ تا فایل ۱۰ گیگ داره.
حدودا ۳۲-۳۴٪ سرعت با تغییر operator های معمولی چک کردن هدر و پردازش permission, .... به Bitwise operator بدست اومد.
گفتم یک مثال هم اینجا بزنم؛ فقط توی این مثال به چندتا چیز توجه کنید:
۱- زوج بودن عدد محاسبات سنگینی نداره هرچند؛ محاسبه باقیمانده از AND گرفتن سنگین تر هست.
۲- پایتون زبان سطح بالاس؛ محاسبه باقی مانده و AND سربارهای پایتونی داره که باعث میشه تفاوت کمتر بشه و CPython هم بسیار اپتیمایز شده هست.
۳- مثال خیلی ساده هست.
با این حال مفهوم رو آموزش میده و تفاوت اندک هم میشه دید.
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
