🧑💻PythonDev🧑💻
#django_roadmap #roadmap امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند : ۱- پایتون رو تا سطح خوبی بلد هست ۲- ساختمان داده و الگوریتم رو میشناسه ۳- لینوکس، گیت و داکر رو هم بلده یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین…
یکسری از دوستان اشاره کردند که کتاب جزئیات کمی داره و برای کسی که قبل از این وب کار نکرده خیلی راحت و سر راست نیست :
اگر این شرایط برای شما هم صدق میکند، به این لیست میشه یک کتاب دیگر هم اضافه کرد.
کتاب :
Web Development with Django 2nd edition By Ben Shaw, .... (Packt pub)
خوبی دیگری که این کتاب برای دوستان تازهکار داره این هست که توی هر فصل و بعد از هر مبحث یک تمرین جزئی درمورد آنچه صحبت شد هم ارائه میده
فصلهای دیگری هم که بنظرم بهتر توضیح داده برای شروع :
Media serving and file uploads,
Session and authentication
Testing your django application
و بخشهایی (شامل مثال) از فصل های :
Generating CSV, PDF, and other Binary File
Django Third-Party Libraries
هست.
بازم میگم اگر کتاب دیگری خوندید، درگیر کتابهای مختلف نشید، تمرین کردن و با جستجو رسیدن به آنچه که نیاز دارید اولویت باشه براتون
اما اگر سرفصلی هست که فکر میکنید به خوبی متوجه نشدید یا ضعف دارید فقط همون فصل رو از کتاب، دوره یا منبع دیگری دنبال کنید.
بعنوان مثال، فرقی نمیکنه چه کتابی باشه؛ وقتی شما نحوه ساخت پروژه یا راهاندازی اپ توی جنگو رو بلدید دیگه لازم نیست سراغ هر کتابی میرید فصل اول و دوم رو بخونید.
حالا اینجا مثال
Django
بود شما به موضوعات دیگر و ... هم تعمیم بدید این موضوع رو.
اولویت اول شما باید کد زدن و تمرین باشه، شخصاً کل هفته رو کد میزنم
آخر هفته که روز استراحتم هست، ترجیح میدم کتاب بخونم تا مطالب و تکنیکهای جدید رو توی کارهام پیاده سازی کنم (و همین ۱ روز برای خیلی از مباحث و کتابها بیشتر از کافی هست).
اگر این شرایط برای شما هم صدق میکند، به این لیست میشه یک کتاب دیگر هم اضافه کرد.
کتاب :
Web Development with Django 2nd edition By Ben Shaw, .... (Packt pub)
خوبی دیگری که این کتاب برای دوستان تازهکار داره این هست که توی هر فصل و بعد از هر مبحث یک تمرین جزئی درمورد آنچه صحبت شد هم ارائه میده
فصلهای دیگری هم که بنظرم بهتر توضیح داده برای شروع :
Media serving and file uploads,
Session and authentication
Testing your django application
و بخشهایی (شامل مثال) از فصل های :
Generating CSV, PDF, and other Binary File
Django Third-Party Libraries
هست.
بازم میگم اگر کتاب دیگری خوندید، درگیر کتابهای مختلف نشید، تمرین کردن و با جستجو رسیدن به آنچه که نیاز دارید اولویت باشه براتون
اما اگر سرفصلی هست که فکر میکنید به خوبی متوجه نشدید یا ضعف دارید فقط همون فصل رو از کتاب، دوره یا منبع دیگری دنبال کنید.
بعنوان مثال، فرقی نمیکنه چه کتابی باشه؛ وقتی شما نحوه ساخت پروژه یا راهاندازی اپ توی جنگو رو بلدید دیگه لازم نیست سراغ هر کتابی میرید فصل اول و دوم رو بخونید.
حالا اینجا مثال
Django
بود شما به موضوعات دیگر و ... هم تعمیم بدید این موضوع رو.
اولویت اول شما باید کد زدن و تمرین باشه، شخصاً کل هفته رو کد میزنم
آخر هفته که روز استراحتم هست، ترجیح میدم کتاب بخونم تا مطالب و تکنیکهای جدید رو توی کارهام پیاده سازی کنم (و همین ۱ روز برای خیلی از مباحث و کتابها بیشتر از کافی هست).
اگه تو صفحههای وب نیاز داشتید یک قسمت کد برنامهنویسی نمایش بدید (مثل مطلب آموزشی در وبلاگ، مستندات فنی مرتبط با برنامهنویسی و...)، با استفاده از Prism میتونید نمایش بلاک کد رو زیباتر و کاربردیتر کنید.
https://prismjs.com
از سینتکس زبانهای مختلفی هم پشتیبانی میکنه و چندتا تم و کلی پلاگین داره که براساس انتخاب اونها css و js نهایی رو برای استفاده در اختیار شما قرار میده.
https://prismjs.com/#plugins
https://prismjs.com
از سینتکس زبانهای مختلفی هم پشتیبانی میکنه و چندتا تم و کلی پلاگین داره که براساس انتخاب اونها css و js نهایی رو برای استفاده در اختیار شما قرار میده.
https://prismjs.com/#plugins
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد
ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
EAFP
امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت.ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
tensorflow 0.7
اومده بود قشنگ یادم هست ازین چالشها زیاد داشتیم)توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
raise CustomException('Finally we raise our custom error in framework.')
from None
همین from None
باعث میشه exception
های قبلی چاپ نشه.پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
🧑💻PythonDev🧑💻
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد EAFP امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت. ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که tensorflow 0.7 اومده…
مثال بالا در صورت وجود
from None
یه ترفند ساده و بکند طور
دانلود فایل از لپتاپ خودتون با گوشی
چیزی که لازم دارید پایتون و مودم وایفای هست.
https://github.com/zamaniamin/Python/wiki/Download-Files-From-Your-Computer-By-Your-Phone
دانلود فایل از لپتاپ خودتون با گوشی
چیزی که لازم دارید پایتون و مودم وایفای هست.
https://github.com/zamaniamin/Python/wiki/Download-Files-From-Your-Computer-By-Your-Phone
GitHub
Download Files From Your Computer By Your Phone
Here is a small and summarized training repository of Python and technologies related to Python, like FastAPI, Pytest, Django or even pip commands. - zamaniamin/Python
تو این دو روز زیاد پست اموزشی نگذاشتم و برنامه دارم که برای دوستان عزیز که با زبان برنامه نویسی پایتون کار می کنند و میخوان یه درجه ای از مهارت های بالا در برنامه نویسی برسن سعی بر این دارم که یه منبع کامل از کتاب خانه ها و رفرنس های زبان پایتون به طور کامل و جامع ارائه بدم که سطح عملی خودتون رو بالا ببرید .💻
🧑💻PythonDev🧑💻
دستاورد جدید آنلاک کردم پروژه دارم اوبنتو آپدیت شده (میزان لگ سیستم به خدا رسیده) ممکنه مشکل از انویدیا هم باشه (ولی درست کار میکنه) دمو هم دارم گوگل هم 403 بهم میده (بدون ویپیان) مشکل ۴۰۳ پا برجا نیست (۲۰۰-۳۰۰ تا ویپیان داره برنامهنویس ایرانی) بطور…
قبل اینکه
Kernel
تغییر بدید، یا درایورها رو دستکاری کنید و ...
Bios Update
بزنید، مخصوصاً اگر سختافزار جدید اضافه کردید.
۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره
و روی نرمافزارها هم فعلاً جدیترین مشکل خودم
smplayer
هست که lag بسیار داره.
پ.ن : توی بررسی لاگهای
احتمال ۹۹٪ دوستانی که هوش مصنوعی کار نمیکنند، به این مشکلات نخواهند خورد
Kernel
تغییر بدید، یا درایورها رو دستکاری کنید و ...
Bios Update
بزنید، مخصوصاً اگر سختافزار جدید اضافه کردید.
۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره
و روی نرمافزارها هم فعلاً جدیترین مشکل خودم
smplayer
هست که lag بسیار داره.
پ.ن : توی بررسی لاگهای
nvidia
متوجه شدم بخشی از مشکلات از نصب cuda
میاد. بعضی تنظیمات رو خودش کنترل میکنه که نمیشه سختافزار رو مناسب کارهای روزانه optimize
کرد (ولی این مورد هم اون ۱۰٪ مشکل من رو حل نمیکنه چون ازینجا نیست)احتمال ۹۹٪ دوستانی که هوش مصنوعی کار نمیکنند، به این مشکلات نخواهند خورد
🧑💻PythonDev🧑💻
قبل اینکه Kernel تغییر بدید، یا درایورها رو دستکاری کنید و ... Bios Update بزنید، مخصوصاً اگر سختافزار جدید اضافه کردید. ۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره و روی نرمافزارها هم فعلاً جدیترین مشکل خودم smplayer هست که lag بسیار داره. پ.ن…
۱۰٪ آخر هم یافت شد؛ nvidia یک موردی رو معرفی کرد به اسم
Nvidia GPU stats tool
توی status bar وضعیت دما و ... GPU هارو بهتون میگه، روی سیستم با ۱ کارت گرافیک احتمالاً مشکلات کمتری داره.
اما وقتی داشتم آنالیز میکردم، دیدم GPU اصلی سیستم، سریعا پاسخ میده و GPU دوم که تقریباً ideal و ضعیفتر هست latency بالاتری داره و همین باعث lag روی سیستم میشده
بخصوص موقع پخش video با smplayer چون من hardware decode رو فعال داشتم.
اوضاع بدتر هم میشد، چون من فاصله بین گرفتن وضعیت gpu هارو هم خیلی کم گذاشته بودم.
خلاصه، اینکه حال نداشتم بزنم
پ.ن : قبلاً این مشکل رو با
Nvidia GPU stats tool
توی status bar وضعیت دما و ... GPU هارو بهتون میگه، روی سیستم با ۱ کارت گرافیک احتمالاً مشکلات کمتری داره.
اما وقتی داشتم آنالیز میکردم، دیدم GPU اصلی سیستم، سریعا پاسخ میده و GPU دوم که تقریباً ideal و ضعیفتر هست latency بالاتری داره و همین باعث lag روی سیستم میشده
بخصوص موقع پخش video با smplayer چون من hardware decode رو فعال داشتم.
اوضاع بدتر هم میشد، چون من فاصله بین گرفتن وضعیت gpu هارو هم خیلی کم گذاشته بودم.
خلاصه، اینکه حال نداشتم بزنم
watch -n 1 nvidia-smi
باعث بدتر شدن اوضاع شده بود؛ اینکه Bios کمک کرد هم احتمال میدم بخاطر این بود که progress bar و کم کردن بافر و ... بود (ولی چون قبل از آپدیت بایوس این اطلاعات رو نگرفته بودم نمیتونم مطمئن بگم)پ.ن : قبلاً این مشکل رو با
System Monitor
داشتم که یک gnome extension بود (متأسفانه خیلی دیر یادم افتاد که میتونه ازین موضوع باشه)اینم اولین چالش برای دوستان بالا خروجی کد بالا ؟؟
Anonymous Quiz
38%
True,false
8%
True,True
46%
False,True
8%
False,False
سوال: best practiceها و ابزارات مورد نیاز برای توسعه یه بسته، لایبرری یا نرمافزار پایتونی چیه؟
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
همچنین
1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
اگر عادت دارید کدهای خودتون رو
1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
https://m.youtube.com/watch?v=FxSsnHeWQBY
https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
وبسایت pre commit:
https://pre-commit.com/
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
Poetry
استفاده کنید، چون ابزار بسیار قدرتمندی هست، کار باهاش بسیار راحته (خیلی شبیه به Cargo
در زبان Rust
هست)، کامیونیتی بزرگی داره، به راحتی محیط dev
و prod
رو میتونید مدیریت کنید، مستندات بسیار خوب و روانی داره، در سریع ترین زمان ممکن میتونید پروژه رو در PyPI
منتشر کنید و همچنین پروژههای معروفی از جمله Rich (کتابخونهای که خود pip
هم ازش برای رنگی کردن progress bar
ها استفاده میکنه) از اون استفاده میکنن، که همین نشون میده چقدر کاربردی هست.همچنین
build
و run
هم توسط Poetry
انجام میشه-
منابع آموزشی:1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
Linting
ابزارهای flake8
و pylint
از معروف ترینها هستن، هر یک رو میتونید شدت سخت گیریشون رو تنظیم کنید، به راحتی همراه با Poetry
تنظیماتشون در یک فایل قرار میگیره و نیاز به نگه داشتن فایلهای متفاوت برای هر کدوم ندارید. به نظرم خود flake8
به تنهایی نیازتون رو برطرف میکنه. اگر از PyCharm
استفاده کنید یک Linter
به صورت Built-in
در اختیارتون میذاره که خوبه و کارتون رو راه میندازه.اگر عادت دارید کدهای خودتون رو
Annotate
کنید و زیاد از Type Hint
ها استفاده میکنید، استفاده از MyPy
به عنوان یک static type checker
به شما کمک میکنه ایرادات موجود در کلاس ها، توابع و ... رو پیدا کنید و بتونید type
های دقیق تری استفاده کنید. همچنین ابزار Pyright
که توسط مایکروسافت توسعه داده میشه، در VSCode
به صورت integrated
با افزونه Pylance
کار میکنه و اگر از VSCode
استفاده میکنید پیشنهاد میکنم حتما افزونه Pylance
رو نصب کنید. PyCharm
هم یک Type Checker
داره ولی هنوز توانمندی Pylance
و MyPy
رو نداره.-
منابع آموزشی:1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
organize
کردن import
ها از isort
استفاده کنید، هم به صورت CLI
در دسترس هست و هم یک API
داره که میتونید در کد پایتون استفاده کنید. یک code formatter
بسیار معروف که در اکثر پروژهها استفاده میشه Black
هست، زیر نظر PSF
(یا Python Software Foundation
) و برنامه نویسای با تجربه و کار کشته ای همچون آقای Łukasz Langa
(ریلیس منیجر پایتون 3.9) توسعه داده میشه، با دیگر ابزار ها مثل isort
سازگار هست، با PEP8
سازگاره و کلی قابلیت مزیت دیگه داره که حقیقتا اینجا جا نمیشن :)-
منابع آموزشی:1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
Pytest
و unittest
(در stdlib
موجود هست) در تست نویسی پروژه ها استفاده میشن، برای تست کردن پروژه در environment
های متفاوت از ابزار tox
استفاده میشه و باهاش میتونید در نسخه های متفاوتی از پایتون کدتون رو تست کنید.-
منابع آموزشی:1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
-
آقای ned batchelder:https://m.youtube.com/watch?v=FxSsnHeWQBY
-
آقای Corey Schafer:https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
Git
در پروژه خودتون استفاده میکنید، پیشنهاد میکنم از pre-commit
حتما استفاده کنید و تمام این ابزارهای گفته شده رو automate
کنید تا در هربار commit
کردن، قبل از اینکه commit
انجام بشه، این ابزارها روی کدتون اجرا بشن و اگر اشکالی در کدتون وجود داره پیدا بشه و اون رو برطرف کنید و دوباره commit کنید.وبسایت pre commit:
https://pre-commit.com/
GitHub
GitHub - Textualize/rich: Rich is a Python library for rich text and beautiful formatting in the terminal.
Rich is a Python library for rich text and beautiful formatting in the terminal. - Textualize/rich
🧑💻PythonDev🧑💻 pinned «سوال: best practiceها و ابزارات مورد نیاز برای توسعه یه بسته، لایبرری یا نرمافزار پایتونی چیه؟ ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم: Dependency Management…»
✔️ سوال.
بهترین راه برای فهمیدن اینکه یه آبجکت hashable هست، چیه؟!
جوابتون رو کامنت کنید.
پاسخش رو فردا میگذارم.
بهترین راه برای فهمیدن اینکه یه آبجکت hashable هست، چیه؟!
جوابتون رو کامنت کنید.
پاسخش رو فردا میگذارم.
کی و چرا از Jupyter Notebook استفاده کنیم؟
به نظر من یکی از شاهکارهای تولید شده همین Jupyter Notebook (که برپایه ی Ipython هست) هست. خیلی خلاصه سعی میکنم به ویژگی هایی که داره اشاره کنم:
۱- مناسبترین گزینه برای زمانی که میخواید report ای به کسی یا جایی بفرستید یا جزوه نویسی کنید:
چون میتونید بین کد های پایتونیتون توضیحات بنویسید. اونم نه فقط تکست معمولی بلکه mardown و LaTeX و html و css و حتی چند کلاس آماده ی bootsrtap. چی بهتر از اینکه یه سری کد های پایتونی قابل اجرا همراه با توضیحات زیبا و رنگی در یک داکیومنت.
۲- از مهمترین ویژگی هاش اینکه cell cell ران میکنه کد هارو ولی به چه درد میخوره؟ فرض کنید شما یه کدی دارید مینویسید که درخواست میدید به URL ای و وقتی جوابش اومد یه کاری روش میکنید. اگه توی ماژول پایتونی بنویسید و توی کد هاتون ارور داشته باشید چی میشه؟ درستش میکنید و باید دوباره ران کنید اونوقت باید دوباره درخواست بزنید به اونجا. "وقت گیره"! یه مثال خیلی پرکاربرد تر دیگه، شما نیاز دارید تا یه محاسبات زمانبری و انجام بدید تا یه آرایه نامپای مثلا تشکیل بشه و حالا ازش یه استفاده کنید... دوباره همین داستان اگه ارور داشته باشید باز باید صبر کنید... به جاش میاید اون بخش setup قضیه رو توی یه cell انجام میدید دیگه همیشه داریدش توی رم. جلوتر فقط کد خودتونو ران میکنید.
۳- خب مثل باقی ادیتور ها سینتکس highlighting داره، با تب code completion داره. ارور هارو زیباتر نمایش میده.
۴- قابلیت نمایش plot های مختلف و dataframe های pandas رو به صورت جدولی داخل خودش داره.
۵- وقتی یه document ای نوشتید به کلی فرمت از جمله PDF, HTML, RST, و خود PY خروجی بگیرید مناسب برای ارائه یا به اشتراک گذاری. گزینه آخر یعنی حتی میتونید اونو به ماژول پایتونی خروجی بگیرید و همه چیزایی که نوشتید به عنوان توضیحات میشه comment داخل اون ماژول.
۶- میتونید از magic command های موجود تو ipython استفاده کنید که بعضیاش خیلی مفیدن. (همونا که با % یا %% شروع میشه) از اینجا چک کنید چیزای باحالی داره.
۷- میتونید توش دستورات شل رو هم وارد کنیدو خروجیشو کنار خروجی های پایتونی خودتون هم ببینید حتی اونارو تو کدتون استفاده کنید!!
files = !ls
الان files عه شما یه لیستی از تمام فایل های داخل دایرکتوریتون هست.
۸- میتونید امکاناتش رو با نصب nbextension ها گسترش هم بدید. مثلا code formatter و یا box عه suggestion و یا linter و ... این لینک یا این لینک رو برای نمونه ببینید.
________________________________________
اگه ویژگی خوب دیگه ای رو نگفتم بگید همچنین ضعف هاش رو هم بگید مثلا جاهایی که مناسب نیست استفاده شه. اولین جایی که مناسب نیست اینکه پروژه توش بزنید...چون برای اینکار نیست اصلا. مثلا برای اینکه از یه ipynb توی یه ipynb دیگه چیزی import کنید نمیتونید مستقیم بزنید
from A import B
باید کار اضافه تری انجام بدید.
ولی درکل تو جایی که میشه ازش استفاده کرد فوق العادس 👍🏻
به نظر من یکی از شاهکارهای تولید شده همین Jupyter Notebook (که برپایه ی Ipython هست) هست. خیلی خلاصه سعی میکنم به ویژگی هایی که داره اشاره کنم:
۱- مناسبترین گزینه برای زمانی که میخواید report ای به کسی یا جایی بفرستید یا جزوه نویسی کنید:
چون میتونید بین کد های پایتونیتون توضیحات بنویسید. اونم نه فقط تکست معمولی بلکه mardown و LaTeX و html و css و حتی چند کلاس آماده ی bootsrtap. چی بهتر از اینکه یه سری کد های پایتونی قابل اجرا همراه با توضیحات زیبا و رنگی در یک داکیومنت.
۲- از مهمترین ویژگی هاش اینکه cell cell ران میکنه کد هارو ولی به چه درد میخوره؟ فرض کنید شما یه کدی دارید مینویسید که درخواست میدید به URL ای و وقتی جوابش اومد یه کاری روش میکنید. اگه توی ماژول پایتونی بنویسید و توی کد هاتون ارور داشته باشید چی میشه؟ درستش میکنید و باید دوباره ران کنید اونوقت باید دوباره درخواست بزنید به اونجا. "وقت گیره"! یه مثال خیلی پرکاربرد تر دیگه، شما نیاز دارید تا یه محاسبات زمانبری و انجام بدید تا یه آرایه نامپای مثلا تشکیل بشه و حالا ازش یه استفاده کنید... دوباره همین داستان اگه ارور داشته باشید باز باید صبر کنید... به جاش میاید اون بخش setup قضیه رو توی یه cell انجام میدید دیگه همیشه داریدش توی رم. جلوتر فقط کد خودتونو ران میکنید.
۳- خب مثل باقی ادیتور ها سینتکس highlighting داره، با تب code completion داره. ارور هارو زیباتر نمایش میده.
۴- قابلیت نمایش plot های مختلف و dataframe های pandas رو به صورت جدولی داخل خودش داره.
۵- وقتی یه document ای نوشتید به کلی فرمت از جمله PDF, HTML, RST, و خود PY خروجی بگیرید مناسب برای ارائه یا به اشتراک گذاری. گزینه آخر یعنی حتی میتونید اونو به ماژول پایتونی خروجی بگیرید و همه چیزایی که نوشتید به عنوان توضیحات میشه comment داخل اون ماژول.
۶- میتونید از magic command های موجود تو ipython استفاده کنید که بعضیاش خیلی مفیدن. (همونا که با % یا %% شروع میشه) از اینجا چک کنید چیزای باحالی داره.
۷- میتونید توش دستورات شل رو هم وارد کنیدو خروجیشو کنار خروجی های پایتونی خودتون هم ببینید حتی اونارو تو کدتون استفاده کنید!!
files = !ls
الان files عه شما یه لیستی از تمام فایل های داخل دایرکتوریتون هست.
۸- میتونید امکاناتش رو با نصب nbextension ها گسترش هم بدید. مثلا code formatter و یا box عه suggestion و یا linter و ... این لینک یا این لینک رو برای نمونه ببینید.
________________________________________
اگه ویژگی خوب دیگه ای رو نگفتم بگید همچنین ضعف هاش رو هم بگید مثلا جاهایی که مناسب نیست استفاده شه. اولین جایی که مناسب نیست اینکه پروژه توش بزنید...چون برای اینکار نیست اصلا. مثلا برای اینکه از یه ipynb توی یه ipynb دیگه چیزی import کنید نمیتونید مستقیم بزنید
from A import B
باید کار اضافه تری انجام بدید.
ولی درکل تو جایی که میشه ازش استفاده کرد فوق العادس 👍🏻
Medium
10 Jupyter Notebook Extensions Making My Lyfe Easier
Level-up your Jupyter Notebook with these 10 Nbextensions.
✔️ سوالها:
➖ چرا CPython رو با assembly نمینویسن؟
➖ چرا CPython رو مثل PyPy نمیکنن؟ یا چرا از PyPy بجای CPython استفاده نمیکنیم؟
✅ پاسخ سوال اول:
سوال اول: کد سی سریعتره یا کد اسمبلی؟
همه به من بگید ببینم، کامپایلرهای زبان سی از سورسکد C، چی تولید میکنن؟ خب حالت خییییلی پایه اینهکه از سورس C، کد اسمبلی تولید میکنن بعد با یه اسمبلر کد ماشینشون رو تحویل میدن.
اما حالت، هیچوقت حالت پایه نیست 😁
کاری که یه کامپایلر سی انجام میده اینه که یه خروجی خیلی efficient و کد اسمبلی خیلی سریع از اون سورسکد بیرون میکشه
این اصل ماجراست.
اینه که جواب سوال میشه کد سی در اکثر مواقع از کد اسمبلی hand written که دقیقا همون کار رو انجام میده سریعتره. این همه مغز و وقت صرف نوشتن کامپایلر کردن تا این بشه
تا این شده
این از این
سوال دوم: نوشتن کد سی آسونتره یا کد اسمبلی؟
سوال سوم: برای نوشتن یه برنامه خیلی ساده، کی سریعتر مینویسه یه C کار یا یه Assembly کار؟
سوال چهارم که جوابش هم میدونیم، کد کی سریعتره؟
تماما C برندهی ماجراست
پس فکر اینکه CPython رو با اسمبلی بنویسن سریعتر میشه رو بندازید بیرون.
به چند دلیل: سری دلایل اول -> همین دلایل بالا
سری دلایل دوم: بابا پایتون توی یه سری کارا کنده به هزار تا دلیل دیگه 😕 گیر ندید به سی یا اسمبلی
الان سورس PyPy که سرعت خیلی بیشتری از CPython توی خیلی جاها داره ببینید، پایتونه به ولله تقریبا بالای ۹۸ ۹۹ درصد پایتونه
پس مشکل جای دیگهست.
✅ پاسخ سوال دوم:
پیادهسازی CPython یک پیادهسازی general هست.
این خیلی معنیها داره
مثال: ببینید یه چیزی وجود داره به اسم numba
(برای مطالعه در مورد نامبا این مقالهام رو بخونید)
این یه JIT Compiler هست برای کارای عددی و محاسباتی دارای حلقههای زیاد
یکی از کارای jit ها همینه، چنین کدهایی رو سریع کنن اما آیا همه چنین کدهایی دارن؟ خیر
آیا تحمل اورهد و سنگینی JIT رو دارن؟ قطعا خیر
میدونید چقدر رم مصرف میکنن؟
برای یه راهحل مشابه بین پایتون و NodeJS، اون نسخهی NodeJS حدود ۴.۵ برابر بیشتر از پایتون رم مصرف کرده، صرفا بخاطر داشتن JIT.
جیتها start up رو هم کندتر میکنن
از اون طرف پایتون بعضی جاها از pypy سریعتره
مثلا یکیش وب
آقای Anthony shaw یه چند تا بنچمارک گرفتن با FastAPI و Uviloop و این دم و دستگاهها
توی همهشون pypy بسیار از CPython کندتر بوده و رم مصرفی خیلی بیشتری داشته
یه مشکل دیگه هم هست
پایپای به طور صد درصد با C extension moduleها اوکی نیست
فرض کن نتونی numpy استفاده کنی 🙂
پس هر چیزی رو بهرکاری ساختن
〰️〰️〰️〰️〰️〰️〰️〰️
➖ چرا CPython رو با assembly نمینویسن؟
➖ چرا CPython رو مثل PyPy نمیکنن؟ یا چرا از PyPy بجای CPython استفاده نمیکنیم؟
✅ پاسخ سوال اول:
سوال اول: کد سی سریعتره یا کد اسمبلی؟
همه به من بگید ببینم، کامپایلرهای زبان سی از سورسکد C، چی تولید میکنن؟ خب حالت خییییلی پایه اینهکه از سورس C، کد اسمبلی تولید میکنن بعد با یه اسمبلر کد ماشینشون رو تحویل میدن.
اما حالت، هیچوقت حالت پایه نیست 😁
کاری که یه کامپایلر سی انجام میده اینه که یه خروجی خیلی efficient و کد اسمبلی خیلی سریع از اون سورسکد بیرون میکشه
این اصل ماجراست.
اینه که جواب سوال میشه کد سی در اکثر مواقع از کد اسمبلی hand written که دقیقا همون کار رو انجام میده سریعتره. این همه مغز و وقت صرف نوشتن کامپایلر کردن تا این بشه
تا این شده
این از این
سوال دوم: نوشتن کد سی آسونتره یا کد اسمبلی؟
سوال سوم: برای نوشتن یه برنامه خیلی ساده، کی سریعتر مینویسه یه C کار یا یه Assembly کار؟
سوال چهارم که جوابش هم میدونیم، کد کی سریعتره؟
تماما C برندهی ماجراست
پس فکر اینکه CPython رو با اسمبلی بنویسن سریعتر میشه رو بندازید بیرون.
به چند دلیل: سری دلایل اول -> همین دلایل بالا
سری دلایل دوم: بابا پایتون توی یه سری کارا کنده به هزار تا دلیل دیگه 😕 گیر ندید به سی یا اسمبلی
الان سورس PyPy که سرعت خیلی بیشتری از CPython توی خیلی جاها داره ببینید، پایتونه به ولله تقریبا بالای ۹۸ ۹۹ درصد پایتونه
پس مشکل جای دیگهست.
✅ پاسخ سوال دوم:
پیادهسازی CPython یک پیادهسازی general هست.
این خیلی معنیها داره
مثال: ببینید یه چیزی وجود داره به اسم numba
(برای مطالعه در مورد نامبا این مقالهام رو بخونید)
این یه JIT Compiler هست برای کارای عددی و محاسباتی دارای حلقههای زیاد
یکی از کارای jit ها همینه، چنین کدهایی رو سریع کنن اما آیا همه چنین کدهایی دارن؟ خیر
آیا تحمل اورهد و سنگینی JIT رو دارن؟ قطعا خیر
میدونید چقدر رم مصرف میکنن؟
برای یه راهحل مشابه بین پایتون و NodeJS، اون نسخهی NodeJS حدود ۴.۵ برابر بیشتر از پایتون رم مصرف کرده، صرفا بخاطر داشتن JIT.
جیتها start up رو هم کندتر میکنن
از اون طرف پایتون بعضی جاها از pypy سریعتره
مثلا یکیش وب
آقای Anthony shaw یه چند تا بنچمارک گرفتن با FastAPI و Uviloop و این دم و دستگاهها
توی همهشون pypy بسیار از CPython کندتر بوده و رم مصرفی خیلی بیشتری داشته
یه مشکل دیگه هم هست
پایپای به طور صد درصد با C extension moduleها اوکی نیست
فرض کن نتونی numpy استفاده کنی 🙂
پس هر چیزی رو بهرکاری ساختن
〰️〰️〰️〰️〰️〰️〰️〰️
ویرگول
پایتون «بسیار» سریع است! - ویرگول
یکی نیست تکلیف ما رو روشن کنه بالاخره پایتون کنده یا تند؟ بیاید تا یکم صحبت کنیم!