🧑‍💻PythonDev🧑‍💻
365 subscribers
86 photos
3 videos
15 files
78 links
Python tips and tricks
The Good, Bad and the Ugly

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

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


@Mtio975
Download Telegram
کتاب django for beginners برای اون هایی که میخوان با جنگو شروع کنن میتونه یه کیک استارت خوب باشه
Django_for_beginners_Build_websites_with_python_and_django_DevTwitter.pdf
14.2 MB
#Django

Django for beginners
Build websites with python and django
By William S. Vincent

308 Pages
فایل بعدی که باید داشته باشید
requirements.txt
نبودش توی تیم ما خطای بزرگی هست :
۱- دیلی شرکت نکردن بدون اطلاع قبلی؛ دستمزد اون روز رو حذف می‌کنه
۲- پروژه تحویل دادن بدون
requirements.txt
درست بین ۲ تا ۷ روز کسر از دستمزد داره (اهمیت رو ببینید)

اما توی تیم من حداقل ۳ نکته هم باید رعایت بشه :
۱- بجای یک فایل باید ۳ تا فایل برای requirements داشته باشید
base.txt- local.txt - product.txt
یک پوشه به این اسم میسازید و این ۳ فایل داخلش قرار میگیره
تصویر بالا برای فایل
base.txt
هست؛ این فایل شامل پکیج‌هایی میشه که چه توی محیط توسعه چه توی پروداکشن باید وجود داشته باشه
local.txt
برای محیط توسعه هست خط اول این فایل همیشه باید
-r base.txt
باشه که بصورت اتومات پکیج‌های داخل base رو هم شامل بشه موقع نصب و باقی خط‌های فایل شامل پکیج‌هایی میشه که فقط توی محیط توسعه لازم هست :
black, isort,  flake8, pre-commit, ...
و در نهایت
prod.txt
مواردی که فقط روی پروداکشن لازم هست بازم خط اول باید
-r base.txt
باشه حتما و قطعا چیزی که توی local هست نباید اینجا باشه.
🧑‍💻PythonDev🧑‍💻
فایل بعدی که باید داشته باشید requirements.txt نبودش توی تیم ما خطای بزرگی هست : ۱- دیلی شرکت نکردن بدون اطلاع قبلی؛ دستمزد اون روز رو حذف می‌کنه ۲- پروژه تحویل دادن بدون requirements.txt درست بین ۲ تا ۷ روز کسر از دستمزد داره (اهمیت رو ببینید) اما توی…
۲- تمامی پکیج‌ها باید ورژن داشته باشند اما استفاده از
==
برای ورژن زدن پکیج‌ها ریکامند نمی‌شه بجاش از
~=
استفاده می‌کنیم دلیلش هم این هست که آپدیت‌های پچ رو بتونیم دانلود و نصب کنیم (چه امنیتی باشه چه رفع باگ‌های ساده) بدون اینکه نیازی به تغییر حتی ۱ خط کد باشه

۳- تا جایی که امکان داره موارد رو بصورت دستی بنویسید و از pip freeze دوری کنید؛ که فقط پکیج‌های اصلی ذکر بشه و فایل تمیزتری برای بررسی وجود داشته باشه.

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

بازم میگم ما ترجیح میدیم راجب انتخاب ابزار هیچ فشاری روی باقی تیم نداشته باشیم.
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم.

همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار :
۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون بمونه + تاریخ)
۲- بعد از اینکه تغییرات رو اعمال کردید (اسم تغییرات + تاریخ یا git commit)

شاید شما ندونید برای چی ذخیره می‌کنیم ولی ی روزی نجاتتون میده.

برای گرفتن خروجی بالا توی ترمینال این دستور رو اجرا می‌کنیم با توجه به این نکته که اسکریپت مثال (توی عکس قبلی رو به اسم example.py ذخیره کردیم)
python -m cProfile -s cumulative example.py
و درصورتی که بخوایم خروجی رو ذخیره کنیم که برای آنالیزش از
snakeviz, pstats
استفاده بشه و مهمتر از همه داکیومنتش کرده باشیم می‌تونیم از دستور
python -m cProfile -s cumulative -o compare_bubble_vs_builtin_sort_$(date +'%Y_%m_%dT%H_%M_%S').prof example.py

استفاده کنیم؛ حتما پسوند رو .prof بذارید که راحت شناسایی بشه.
🧑‍💻PythonDev🧑‍💻
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم. همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار : ۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون…
توی دستور بالا :
-m:
برای استفاده از یک ماژول خاص استفاده می‌شه
-s:
ترتیب نمایش هست که گفتیم بر اساس cumulative time باشه  همیشه هم همین رو استفاده خواهید کرد
-o:
برای اینکه خروجی رو توی یک فایل بریزه و توی ترمینال نمایش نده (اول در تاریخ ثبت می‌کنیم بعد ی بار هم بدون این option برای راحتی خودمون اجرا می‌کنیم)

تفسیر خروجیش هم خیلی ساده‌تر از اون چیزی هست که فکر می‌کنید فقط چندتا نکته داره :
ncalls:
تعداد فراخوانی اون خط از کد (ستون آخر کمی جلوتر توضیح میدم دقیق)
وقتی دوتا عدد هست مثل خط اول خروجی توی عکس قبلی
3/1:
عدد کوچیکتر تعداد فراخوانی غیر بازگشتی یا primitive هست و عدد بزرگتر تعداد کل فراخوانی به هر شکلی که بوده (بازگشتی و غیر بازگشتی و ...) یعنی بصورت کلی اون builtin method توی مثال قبل ۳ بار فراخوانی شده.

tottime:
مجموع زمان مورد نیاز جهت اجرای اون تایع؛ به غیر از زمان اجرای توابعی که داخل این تابع فراخوانی شده‌اند.

percall:
زمان اجرای مورد نیاز برای هربار اجرای اون خط یا اون تابع معمولا حدودی برابر هست با :
tottime / ncalls

cumtime:
مهمترین ستون همینه و اون مرتب سازی که توی دستور انجام دادیم (منظورم s cumulative- هست) بر اساس همین ستون بود.
مجموع زمان مورد نیاز از لحظه فراخونی اون خط یا تابع تا خروج از اون خط یا تابع + زمان مورد نیاز برای اجرای توایعی که داخل این تابع یا خط فراخوانی شدند + زمان اجرا بصورت recursive , ... خلاصه همه چیز اینجاس و از همه ستون‌ها هم دقیق‌تر هست

filename:lineno(function)
اینم که بسیار واضح هست از سمت چپ به راست :
اسم اسکریپت : شماره خطی که اون کد اجرا شده (اسم تابع)
اسم تابع برای شرایطی مهم هست که داخل تابع اصلی توابع دیگری هم فراخوانی بشه

توی خروجی بالا مواردی مثل builtin.exec (از توابع مورد علاقه من هست اصن ی وضعی) و برخی موارد دیگر برای
import random
هست


همینجا بگم که تصویر قبلی خروجی کامل cProfile نیست و بنده این خروجی رو بریدم تا خواناتر باشه
خوب از کجا شروع کنم براتون توضیح بدم همین چند دقیقه پیش داشتم با یه سری دوستان گفتگو میکردم در مورد بازار کار و اینکه برای بازار کار اماده هستن یا نه یه سری از دوستان میدونم پایتون کار کردن و جنگو هم خیلی کار کردن کلس داکیومنت خوندن و دوره مختلف دیدن و پروژه های مختلف زدن و کتاب های مختلفی هم خوندن ولی مثلا ویدیو وقتی میبینن مثل یوتیوب میکرو فرانت بر میخورن خیلی مباحث جدید می بینن مصاحبه هم که میرن رد میشن
🧑‍💻PythonDev🧑‍💻
خوب از کجا شروع کنم براتون توضیح بدم همین چند دقیقه پیش داشتم با یه سری دوستان گفتگو میکردم در مورد بازار کار و اینکه برای بازار کار اماده هستن یا نه یه سری از دوستان میدونم پایتون کار کردن و جنگو هم خیلی کار کردن کلس داکیومنت خوندن و دوره مختلف دیدن و…
در ادامه این باید بهتون بگم که اول بررسی که دوره ها رو پروژه ها ور کتاب های که خوندی نرو سطح مهارت های خودت رو ارزیابی کنید ببینید میتونید مفاهیم پیچیده رو درک کنی و تو کاربرد عملی ازشون استفاده کنید اگهی های استخدامی رو مطالعه کنید تو همون حوزه جنگو تحلیل کنید نیاز های موجود تو بازار ر و بهتون کمک میکنه که کدوم موضوع ها کمی ناکافی هستن و چه مهارت های رو هم باید بهبود بدین مهارت های جدید رو بررسی کنید ویدیو ها و منابع اموزش میکرو فرانت اند رو بررسی کنید یا هر موضوع جدید دیگه ای رو یا هر موضوعی که بهش برخورد میکنید رو ببینید اینکه میتونید این موضوع ها رو یاد بگیرید یا نه که این بستگی به نیاز شغلی خودتون داره از مصاحبه ها بازخورد بگیرین اگه خدای نکرده تو مصاحبه رد شدین سعی کنید از مصاحبه کننده یه بازخورد بگیرید این بهتون کمک میکنه نقطه ضعف خودتون روپیدا کنید مهارت های جدید رو توسعه بدین برنامه ریزی واسه توسعه دادن یه مهارت جدید و پیشرفت تو حوزه های که الان نیاز مند بازار کار هستن این هم ممکن هستش که یه سری مهارت های اضاف مثل فرانت اند یا مدیریت پروژه هم براتون مفید باشه تمام مورادی که براتون بهش گفته هم بر گرفته از تجریات کاری خودم هستش و بهتون گفتم که تو مسیر کار و یادگیری به مشکل برنخورید
خیلی وقتا بهم میگن، اشتباه می‌کنی و وقتت رو الکی تلف می‌کنی که بجای خوندن فقط آموزش و یادگیری میری سورس کد رو میخونی ؛

هیچ‌وقت این موضوع رو جواب نمیدم و همیشه می‌گم حق با شماست، ولی به این آدما باید گفت :

خیلی باید رشد کنی، تا بفهمی چرا حتماً باید بعضی سورس کدها رو خوند.

حداقلش : کمک واضح به
System design, Optimization
هست.

مثلاً می‌دونستید
Coroutine
توی پایتون 3.5 کلا ۳۵۰ خط کد بوده، و پیاده سازیش با
generator
های پایتون بود ؟
برای همین می‌تونستیم خیلی راحت بهش فیچر اضافه کنیم (کاری که توی پروژه انجام دادیم)

تصویر مربوط به سورس کد coroutine روی python3.5
🧑‍💻PythonDev🧑‍💻
خیلی وقتا بهم میگن، اشتباه می‌کنی و وقتت رو الکی تلف می‌کنی که بجای خوندن فقط آموزش و یادگیری میری سورس کد رو میخونی ؛ هیچ‌وقت این موضوع رو جواب نمیدم و همیشه می‌گم حق با شماست، ولی به این آدما باید گفت : خیلی باید رشد کنی، تا بفهمی چرا حتماً باید بعضی سورس…
حالا ی بحثی که پیش میاد این هست که چقدر باید سورس کد خوند و تا کجا ؟

اینکه هر پکیجی که دستمون میاد رو بریم سورس کدش رو بخونیم که عملاً واقعی نیست، کاش سرعت خوندن انقدر زیاد بود یا زمان زیادی داشتیم که خب اینطوری نیست و همین شاید زندگی رو ارزشمند کرده 🤔

ولی شخصاً مطالب و فیچرهای خیلی مهم پایتون رو حتماً سورس کداش رو میخونم (قرار نیست خط به خط دیباگ کنید)
باقی پکیج‌ها هم فقط مواردی که می‌دونم ازون روزی که یاد میگیرم به بعد قرار هست توی تموم پروژه‌هام ازش استفاده کنم و پول در بیارم

پکیج‌هایی که قراره فقط ۶ ماه باهاش کار کنم یا در حد ۱ پروژه هست رو هیچوقت اینکارو نمی‌کنم مگر اینکه مجبور بشم یا شرکت بخواد داخلش تغییرات ایجاد کنه.

این مرز بندی بسیار بسیار مهم هست که درست و بهینه باشه
دوستان که تازه کار هستن یه آمار بهم بدین بینم چی به چیه تا بنده براتون در مورد دوره های آموزشی و بازار کار براتون توضیح بدم
Anonymous Poll
62%
مبتدی(تازه کار)
24%
متوسط (کارآموزی)
14%
پیشرفته
یه سری از دوستان از من خواستن که در مورد یادگیر پایتون و اینکه مسیر اموزش پایتون و بازار کارش بگم خوب من سعی میکنم خیلی کامل توضیح بدم که کم گذاشته نباشم واستون و بهتون تو مسیر یادگیری کمک کنه خوب اول که باید بهتون بگم که واسه یادگیری پایتون مفاهیم اولیه رو اول یاد بگیرید مفاهیم اولیه شامل همون متغییر ها لیست حلقه و توابع میشه می تونید از منابع اموزشی انلاین استفاده کنید و یا کتاب های مانند learn python the hard way که نویسنده اون zed shaw هست استفاده کنید در مرحله دوم یادگیری ساختار داده ها و الگوریتم ها خیلی مهم هست که توی حل مسائل پیچیده خیلی به کارتون میاد از کتاب های که میتونم معرفی کنم میتونم به کتاب data structures and algorithms in python که اثر michael استفاده کنید و اینکه باید بگم که پروژه های عملی هم خیلی بهتون کمک میکنه بهترین روش برای تقویت مهارت های پایتون انجام داده پروژه های عملی هستش شروع به پیاده سازی پروژه های کوچک کنید مثل یک برنامه ماشین حساب یا یک برنامه تحت وب ساده و پس از این ها پروژه های پیشرفته تر مثل مدیریت سیستم داده ها بپردازین
🧑‍💻PythonDev🧑‍💻
یه سری از دوستان از من خواستن که در مورد یادگیر پایتون و اینکه مسیر اموزش پایتون و بازار کارش بگم خوب من سعی میکنم خیلی کامل توضیح بدم که کم گذاشته نباشم واستون و بهتون تو مسیر یادگیری کمک کنه خوب اول که باید بهتون بگم که واسه یادگیری پایتون مفاهیم اولیه…
و اموزش مفاهیم پیشرفته شما هر چه بیشتر مسیر اموزشتون جلو بره به مفاهیم پیشرفته تری تو پایتون مثل خطا ها و استثنا ها نخ ها و همزمانی و برنامه نویسی شی گرا بپردازین برا این کار میتونید از منابع اموزشی انلانی مانند سایت python.org , real python استفاده کنید یه سری چارچوب ها و پروژه های واقعی هستند که شما با یادگیری این چهارچوب های پایتون مثل Django , Flask میتونید برنامه های تحت وب قدرتمندی رو بسازید شروع به ساخت پروزه های واقعی و تجاری کنید و با کار تیمی و مشارکت تو گروه های توسعه دهنده ها پیشرفت کنید و گام بعدی به روز رسانی هستش پایتون یه زبان برنامه نویسی پویا هستش بنابراین باید بهتون بگم که روزانه از طریق منابع اموزشی انلاین کتاب ها و وبلاگ ها و و جامعه برنامه نویسی پایتون خودتون رو بروز کنید میتونید در دروه های انلاین و دوره های حضوی هم شرکت کنید و مهارت خودتون رو بالا ببرید من در ادامه دوره ای رو معرفی میکنم براتون و یه سری نکته های اصولی هم میگم واستون
🧑‍💻PythonDev🧑‍💻
و اموزش مفاهیم پیشرفته شما هر چه بیشتر مسیر اموزشتون جلو بره به مفاهیم پیشرفته تری تو پایتون مثل خطا ها و استثنا ها نخ ها و همزمانی و برنامه نویسی شی گرا بپردازین برا این کار میتونید از منابع اموزشی انلانی مانند سایت python.org , real python استفاده کنید…
تا جایی که میتونید از دیدن دور های با ساعت اموزش خیلی بالا پرهیز کنید این طور تایم که دارید به شدت گرفته میشه در هنگام یادگیری حتما نت برداری بشه و لطفا اگه نت برداری میکنید روزانه مطالع داشته باشید نت برداری کردن و نخوندن باعث میشه مطالب که نوشتید ارشیو بشن و بهشون مراجعه نکنید پس تا جایی که میتونید حتما روزانه ساعت مشخصی رو واسه خوندن مطالب که برداشت کردین بزارین سعی کنید داکیومنت خونی هم داشته باشین با رفرنس ها کتاب خونه های پایتون اشنایی داشته باشید که میتونید به سایت رسمی خود پایتون مراجعه کنید و یا از سایت های دیگر استفاده کنید یادگیری زبان انگلبسی در برنامه نویسی به شدت مهم و تاثیر گذار هستش حتما زبان انگلیسی خودتون رو تقویت کنید از حفظ کردن کد و کد زنی که فقط کد بزنید به شدت پرهیز کنید همه میتونن کد بزنن بیشتر در کنار کد زنی توسعه دادن یه پروژه رو هم یاد بگیرید
🧑‍💻PythonDev🧑‍💻 pinned «یه سری از دوستان از من خواستن که در مورد یادگیر پایتون و اینکه مسیر اموزش پایتون و بازار کارش بگم خوب من سعی میکنم خیلی کامل توضیح بدم که کم گذاشته نباشم واستون و بهتون تو مسیر یادگیری کمک کنه خوب اول که باید بهتون بگم که واسه یادگیری پایتون مفاهیم اولیه…»
🧑‍💻PythonDev🧑‍💻 pinned «و اموزش مفاهیم پیشرفته شما هر چه بیشتر مسیر اموزشتون جلو بره به مفاهیم پیشرفته تری تو پایتون مثل خطا ها و استثنا ها نخ ها و همزمانی و برنامه نویسی شی گرا بپردازین برا این کار میتونید از منابع اموزشی انلانی مانند سایت python.org , real python استفاده کنید…»
🧑‍💻PythonDev🧑‍💻 pinned «تا جایی که میتونید از دیدن دور های با ساعت اموزش خیلی بالا پرهیز کنید این طور تایم که دارید به شدت گرفته میشه در هنگام یادگیری حتما نت برداری بشه و لطفا اگه نت برداری میکنید روزانه مطالع داشته باشید نت برداری کردن و نخوندن باعث میشه مطالب که نوشتید ارشیو بشن…»
دوره های برنامه نویسی منابع زیادی هستن بنده به شخصه به استاد خاصی اشاره نمیکنم و تعدادی دوره میگم چون یادگیری هر فردی متفاوت هستش و ممکن هست هر کس با استادی یاد بگیره دوره های که میگم به شرح زیر هستن دوره پایتون مقدماتی و پیشرفته جادی دوره پایتون رضا دولتی دوره پایتون کدیاد امیر حسین امیری دوره پایتون نابغه ها امیر حسین معلمی دوره پایتون توسعه وب حسین رمضان پور سون لرن ممکنه باز هم دوره های باشه که من اشنایی با اساتیدشون ندارم و دوستانی که زبان انگلیسی خوبی دارن میتونن دوره پایتون یدومی و دوره پایتون لینکدین رو بهشون معرفی میکنم
🧑‍💻PythonDev🧑‍💻 pinned «دوره های برنامه نویسی منابع زیادی هستن بنده به شخصه به استاد خاصی اشاره نمیکنم و تعدادی دوره میگم چون یادگیری هر فردی متفاوت هستش و ممکن هست هر کس با استادی یاد بگیره دوره های که میگم به شرح زیر هستن دوره پایتون مقدماتی و پیشرفته جادی دوره پایتون رضا…»
Please open Telegram to view this post
VIEW IN TELEGRAM
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم.

همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار :
۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون بمونه + تاریخ)
۲- بعد از اینکه تغییرات رو اعمال کردید (اسم تغییرات + تاریخ یا git commit)

شاید شما ندونید برای چی ذخیره می‌کنیم ولی ی روزی نجاتتون میده.

برای گرفتن خروجی بالا توی ترمینال این دستور رو اجرا می‌کنیم با توجه به این نکته که اسکریپت مثال (توی عکس قبلی رو به اسم example.py ذخیره کردیم)
python -m cProfile -s cumulative example.py
و درصورتی که بخوایم خروجی رو ذخیره کنیم که برای آنالیزش از
snakeviz, pstats
استفاده بشه و مهمتر از همه داکیومنتش کرده باشیم می‌تونیم از دستور
python -m cProfile -s cumulative -o compare_bubble_vs_builtin_sort_$(date +'%Y_%m_%dT%H_%M_%S').prof example.py

استفاده کنیم؛ حتما پسوند رو .prof بذارید که راحت شناسایی بشه.