پیشگیری از XSS در جنگو 📖
در ادامه پست قبل که درباره حمله های XSS نکاتی رو گفته بودم، نکاتی که به ذهنم میرسه تا از این حمله تا حد ممکن پیشگیری کنیم رو با شما به اشتراک میگذارم، خوشحال میشم اگر مواردی که از قلم انداختم را با من با اشتراک بگذارید.
1- هر ورودی از کاربر باید تمیز بشه.
2- استفاده از safe_string ها را چک کرده به حداقل برسونید، استفاده از اپ هایی مانند django-bleach هم میتونه کمک کنه.
3- موقع طراحی model، serializer و forms از مناسبترین (خاص ترین) نوع فیلد و داده استفاده کنید. اینطوری جنگو میتونه در validation و cleaning کمک تون کنه و قابلیتهای بیشنری در اختیار تون بگذره.
django-bleach docs:
https://lnkd.in/ezCsMdgk
Django's docs on HTML untilities:
https://lnkd.in/e6qmfnVn
Django model field types:
https://lnkd.in/ee4nTweu
لینک پست پیشین:
https://lnkd.in/erigx6C5
تشکر از @alireza_amouzadeh
در ادامه پست قبل که درباره حمله های XSS نکاتی رو گفته بودم، نکاتی که به ذهنم میرسه تا از این حمله تا حد ممکن پیشگیری کنیم رو با شما به اشتراک میگذارم، خوشحال میشم اگر مواردی که از قلم انداختم را با من با اشتراک بگذارید.
1- هر ورودی از کاربر باید تمیز بشه.
2- استفاده از safe_string ها را چک کرده به حداقل برسونید، استفاده از اپ هایی مانند django-bleach هم میتونه کمک کنه.
3- موقع طراحی model، serializer و forms از مناسبترین (خاص ترین) نوع فیلد و داده استفاده کنید. اینطوری جنگو میتونه در validation و cleaning کمک تون کنه و قابلیتهای بیشنری در اختیار تون بگذره.
django-bleach docs:
https://lnkd.in/ezCsMdgk
Django's docs on HTML untilities:
https://lnkd.in/e6qmfnVn
Django model field types:
https://lnkd.in/ee4nTweu
لینک پست پیشین:
https://lnkd.in/erigx6C5
تشکر از @alireza_amouzadeh
👍7👎1
فراخوان جذب رایگان مدرس 😂
سلام به همه
برای دوره رایگان برنامه نویسی از پایه (از کامپیوتر چیست تا طراحی سایت)
نیاز به کمک دارم. تا الان 31 قسمت منتشر شده.
توی این دوره قراره علاوه بر پایتون و جنگو و جنگو رست، اینهارو هم یاد بدم: html, css, javascript, bootstrap , git و خیلی چیزای دیگه
حتی شاید سمت اصول سالید و کلین کد و دیزاین پترن و نکات رزومه نویسی، سفته دادن 😂 و مهارت های دیگه که به برنامه نویسی ارتباط داره هم برم
✔️ لکن من توی بعضی هاشون مبتدی هستم و وقتی چیزی رو تسلط ندارم آموزشش هم مبتدی خواهد بود.
میخوام که هر کسی آمادگی داره که css, bootstrap , javascript و... رو (رایگان) تدریس کنه بهم پیام بده و با هم آموزش بسازیم.
به آیدی @miladhzz پیام بدید لطفا
سلام به همه
برای دوره رایگان برنامه نویسی از پایه (از کامپیوتر چیست تا طراحی سایت)
نیاز به کمک دارم. تا الان 31 قسمت منتشر شده.
توی این دوره قراره علاوه بر پایتون و جنگو و جنگو رست، اینهارو هم یاد بدم: html, css, javascript, bootstrap , git و خیلی چیزای دیگه
حتی شاید سمت اصول سالید و کلین کد و دیزاین پترن و نکات رزومه نویسی، سفته دادن 😂 و مهارت های دیگه که به برنامه نویسی ارتباط داره هم برم
✔️ لکن من توی بعضی هاشون مبتدی هستم و وقتی چیزی رو تسلط ندارم آموزشش هم مبتدی خواهد بود.
میخوام که هر کسی آمادگی داره که css, bootstrap , javascript و... رو (رایگان) تدریس کنه بهم پیام بده و با هم آموزش بسازیم.
به آیدی @miladhzz پیام بدید لطفا
👍7👎4
Forwarded from بنیاد پایتون کاران فارسی (M4hdi)
✔️ سوال: 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/
✒️ @Pygrammer
〰️〰️〰️〰️〰️〰️〰️
©️@PyFarsi
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 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/
✒️ @Pygrammer
〰️〰️〰️〰️〰️〰️〰️
©️@PyFarsi
👍3
Forwarded from Django Expert (Boby Cloud)
✔️ راهنمای کلین کد در پایتون
کتاب کلین کد معروف آقای Robert C. Martin برای هر برنامه نویسی از واجباته، اما چون درمورد جاوا صحبت میکنه، برای برنامه نویس های پایتون لذت بخش و خیلی بدردبخور نیست.
این ریپو راهنمای بسیار خوب و دقیقی برای کد تمیز نوشتن در پایتون هست که همون کتاب کلین کده، اما به زبان پایتون
از خوندنش لذت ببرید
👉 Link: https://github.com/SepehrRasouli/clean-code-python
✅بچهها سپهر کل ریپو کلین کد پایتون رو به فارسی ترجمه کرده، برای حمایت ازش استار بدید 🔥✌️
〰️〰️〰️〰️〰️
© @DjangoEx
کتاب کلین کد معروف آقای Robert C. Martin برای هر برنامه نویسی از واجباته، اما چون درمورد جاوا صحبت میکنه، برای برنامه نویس های پایتون لذت بخش و خیلی بدردبخور نیست.
این ریپو راهنمای بسیار خوب و دقیقی برای کد تمیز نوشتن در پایتون هست که همون کتاب کلین کده، اما به زبان پایتون
از خوندنش لذت ببرید
👉 Link: https://github.com/SepehrRasouli/clean-code-python
✅بچهها سپهر کل ریپو کلین کد پایتون رو به فارسی ترجمه کرده، برای حمایت ازش استار بدید 🔥✌️
〰️〰️〰️〰️〰️
© @DjangoEx
👍9
✅ ثبت نام با ایمیل فعالسازی در جنگو
سوال یکی از دوستان بود...
لینکی که میتونه کمک کنه:
https://medium.com/@frfahim/django-registration-with-confirmation-email-bb5da011e4ef
سوال یکی از دوستان بود...
لینکی که میتونه کمک کنه:
https://medium.com/@frfahim/django-registration-with-confirmation-email-bb5da011e4ef
Medium
Django registration with confirmation email
When we sign up on website its send a email for confirmation to active an account. Or confirmation email need to change password or change…
👍9
سلام به همه 👋🏻
امروز یکی از دوستان در مورد چند زبانه کردن سایت جنگویی ازم پرسید
اولین پروژه ای که با جنگو برای مشتری انجام دادم. یه سایت چند زبانه بود (فکر کنم فارسی انگلیسی روسی)
سورسش به صورت عمومی توی لینک زیر در دسترس هست (تجربه زیادی نداشتم توی جنگو، اما تجربه خوبی کسب کردم باهاش)
https://github.com/miladhzz/fahandejsite1
امروز یکی از دوستان در مورد چند زبانه کردن سایت جنگویی ازم پرسید
اولین پروژه ای که با جنگو برای مشتری انجام دادم. یه سایت چند زبانه بود (فکر کنم فارسی انگلیسی روسی)
سورسش به صورت عمومی توی لینک زیر در دسترس هست (تجربه زیادی نداشتم توی جنگو، اما تجربه خوبی کسب کردم باهاش)
https://github.com/miladhzz/fahandejsite1
GitHub
GitHub - miladhzz/fahandejsite1
Contribute to miladhzz/fahandejsite1 development by creating an account on GitHub.
👍9
جنگولرن
تفاوت merge و rebase در گیت از لینکدین Slobodan Gajić
در مورد Cherry-pick در گیت. از لینکدین Slobodan Gajić
👍1
Forwarded from Microfrontend.ir
پیاده سازی Django Soft Delete
چندی پیش خبری منتشر شد که در توییتر حذف دادهها به درستی انجام نمیشود. واقعیت این است که در اغلب نرمافزارهای مدرن دادهها به صورت فیزیکی حذف نمیشوند و صرفا برچسپ حذف شده میگیرند. در این ویدیو با هدف آشنایی بیشتر با مدلهای abstract و proxy در جنگو و همچنین ایجاد Custom Queryset و Custom Manager و Custom Admin Action مدلی را طراحی کردیم که در صورت ارث بری از آنها دادهها با دستور حذف به صورت فیزیکی پاک نشوند و در صورت لزوم برگردانده شوند. برای توضیح بیشتر نیز به جنگو ادمین یک اکشن اضافه کردیم که دادههایی که حذف شده اند را برکردانیم
Link: https://youtu.be/I_23u4xj1Ws
PlayList: https://youtube.com/playlist?list=PLJ9zDGwhhsBwdrfdaoOqbYev3_ocuBOfv
〰️〰️〰️〰️〰️
© @microfrontend_ir
چندی پیش خبری منتشر شد که در توییتر حذف دادهها به درستی انجام نمیشود. واقعیت این است که در اغلب نرمافزارهای مدرن دادهها به صورت فیزیکی حذف نمیشوند و صرفا برچسپ حذف شده میگیرند. در این ویدیو با هدف آشنایی بیشتر با مدلهای abstract و proxy در جنگو و همچنین ایجاد Custom Queryset و Custom Manager و Custom Admin Action مدلی را طراحی کردیم که در صورت ارث بری از آنها دادهها با دستور حذف به صورت فیزیکی پاک نشوند و در صورت لزوم برگردانده شوند. برای توضیح بیشتر نیز به جنگو ادمین یک اکشن اضافه کردیم که دادههایی که حذف شده اند را برکردانیم
Link: https://youtu.be/I_23u4xj1Ws
PlayList: https://youtube.com/playlist?list=PLJ9zDGwhhsBwdrfdaoOqbYev3_ocuBOfv
〰️〰️〰️〰️〰️
© @microfrontend_ir
👍7
Forwarded from Django Expert (Majid A.M)
✔️ تا حالا به صورت اختصاصی Django ORM
رو خوندید؟ یه لینک باحال برای مطالعه ORM
👉🏻Link: https://books.agiliq.com/projects/django-orm-cookbook/en/latest/index.html
™ @DjangoIR
〰〰〰〰〰〰〰
© @DjangoEx
رو خوندید؟ یه لینک باحال برای مطالعه ORM
👉🏻Link: https://books.agiliq.com/projects/django-orm-cookbook/en/latest/index.html
™ @DjangoIR
〰〰〰〰〰〰〰
© @DjangoEx
👍8👏2
Forwarded from دستاوردهای یادگیری عمیق(InTec)
آپدیت کردن ورژن توی پایتون این نیست که فقط ببینید چی جدید اومده و استفاده کنید یا حتی بدتر ازون فقط سورس کدی که مثلا روی py3.2 بود رو بیارید روی py3.11 اجرا بگیرید (فقط در حدی که اگر اروری بود برطرف کنید)
برای همین خیلی از بچههای dev manager / senior کمی مقاومت دارند در برابر ورژن پایتون عوض کردن به بهونه آپدیت.
برای خودم حالا که دارم میرم سراغ 3.11 سخنرانیهای مختلفی رو گوش میدم.
از core developer های پایتون و البته Guido van Rossum راجب پایتون 3.11 و تغییراتش شنیدم و بسیار تاکید شده که اگر python 3.11 به درستی استفاده نشه میتونه از 3.8 کندتر هم باشه
برای مثال (مثال خالق پایتون) : عملگر add توی پایتون نسخه 3.11؛ اینجوری هست که اگر شما تا الان ۲ بار این رو برای int استفاده کردید دفعه سوم دیگه type check انجام نمیده که مطمئن بشه هر ۲ سمت عملگر از int باشه و فقط انجامش میده اگر درست باشه خروجی میگیره و اگر اشتباه باشه بر میگرده روی چیزی که قبلا بود؛ ۲ طرف رو چک میکنه و بعد add رو مناسب اون انجام میده.
با این حساب اگر لیستی از float - int - str دارید بهتره اینطوری نباشه که هی بین این موارد چرخشی کار انجام بشه؛
شاید حتی بهتر باشه ۳ تا لیست (یا قشنگر ۳ تا array) با دیتاتایپ ثابت براشون در نظر بگیرید.
این فقط ۱ مثال از تغییرات زیادی بود که وجود داره
در انتها باید بگم :
دیدن همچین ارائههایی میتونه خیلی کمک کننده باشه
Youtube Link
برای همین خیلی از بچههای dev manager / senior کمی مقاومت دارند در برابر ورژن پایتون عوض کردن به بهونه آپدیت.
برای خودم حالا که دارم میرم سراغ 3.11 سخنرانیهای مختلفی رو گوش میدم.
از core developer های پایتون و البته Guido van Rossum راجب پایتون 3.11 و تغییراتش شنیدم و بسیار تاکید شده که اگر python 3.11 به درستی استفاده نشه میتونه از 3.8 کندتر هم باشه
برای مثال (مثال خالق پایتون) : عملگر add توی پایتون نسخه 3.11؛ اینجوری هست که اگر شما تا الان ۲ بار این رو برای int استفاده کردید دفعه سوم دیگه type check انجام نمیده که مطمئن بشه هر ۲ سمت عملگر از int باشه و فقط انجامش میده اگر درست باشه خروجی میگیره و اگر اشتباه باشه بر میگرده روی چیزی که قبلا بود؛ ۲ طرف رو چک میکنه و بعد add رو مناسب اون انجام میده.
با این حساب اگر لیستی از float - int - str دارید بهتره اینطوری نباشه که هی بین این موارد چرخشی کار انجام بشه؛
شاید حتی بهتر باشه ۳ تا لیست (یا قشنگر ۳ تا array) با دیتاتایپ ثابت براشون در نظر بگیرید.
این فقط ۱ مثال از تغییرات زیادی بود که وجود داره
در انتها باید بگم :
دیدن همچین ارائههایی میتونه خیلی کمک کننده باشه
Youtube Link
YouTube
How we are making Python 3.11 faster - presented by Mark Shannon
EuroPython 2022 - How we are making Python 3.11 faster - presented by Mark Shannon
[The Auditorium on 2022-07-14]
The "Faster CPython" project aims to speed up Python, specifically CPython, by a large factor over the next few releases.
The first release…
[The Auditorium on 2022-07-14]
The "Faster CPython" project aims to speed up Python, specifically CPython, by a large factor over the next few releases.
The first release…
👍15❤1👌1
لینک زیر یکی از سرگرمی های منه. به نظرم بد نیست به جای رفرش زدن ورزش3 اینو رفرش کنم 😂
https://stackoverflow.com/questions/tagged/django
https://stackoverflow.com/questions/tagged/django
Stack Overflow
Newest 'django' Questions
Stack Overflow | The World’s Largest Online Community for Developers
👍15
جنگولرن
✅ چند سطر از کتاب جنگو دیزاین پترن بعضی وقتها ممکنه مدل های ما کدشون زیاد بشه (چاق بشن) اگه چندتا مدل توی یه فایل داشته باشیم میتونیم برای هر کدوم یک فایل مجزا ایجاد کنیم و برای اینکه مثل قبل مثلا بنویسیم import models.Post از فایل __init__.py کمک میگیریم.
بعضی وقتها ممکنه مدل های ما کدشون زیاد بشه (چاق بشن)
اگه چندتا مدل توی یه فایل داشته باشیم میتونیم برای هر کدوم یک فایل مجزا ایجاد کنیم
و برای اینکه مثل قبل مثلا بنویسیم import models.Post از فایل __init__.py کمک میگیریم.
منبع در داکیومنت جنگو:
https://docs.djangoproject.com/en/4.1/topics/db/models/#organizing-models-in-a-package
اگه چندتا مدل توی یه فایل داشته باشیم میتونیم برای هر کدوم یک فایل مجزا ایجاد کنیم
و برای اینکه مثل قبل مثلا بنویسیم import models.Post از فایل __init__.py کمک میگیریم.
منبع در داکیومنت جنگو:
https://docs.djangoproject.com/en/4.1/topics/db/models/#organizing-models-in-a-package
👍7
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
>>> s = 'سایر رسانه ها,'
>>> s.split(',')
['سایر رسانه ها', '']
>>> list(filter(None, s.split(',')))
['سایر رسانه ها']
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Forwarded from Python for Data Science
🔺 حذف استرینگ خالی در split
😊 Fast and clean
🔎 @py4ds
>>> s = 'abc,'
>>> s.split(',')
['abc', '']
>>> [item for item in s.split(',') if item]
['abc']
😊 Fast and clean
🔎 @py4ds
👍7👏1
Forwarded from Python for Data Science
🎯یه مقایسه روی این دوتا روش داشته باشیم
پست ریپلای و این پست
🔺به طور کلی استفاده از تابع فیلتر به همراه lambda میتونه سرعت رو بیاره پایین
اما اینجا خبری از lambda نیست پس نتیجه هم احتمالا کند نیست
یه بررسی اجمالی داشتم روی حالتهای مختلف:
حالتی که خودم توی کانال گذاشتم هم سریع هست هم تمیز اما حالتی که دوستمون نوشتن برای مواردی که رشته طولانی و تعداد splitها زیاد بشه میتونه کمی(شاید حدود کمتر از ۲-۳ درصد) سریعتر باشه
🔺 توجه کنید که این یه حالت خاص هست و خود پایتون هم توصیه میکنه که اگر نیاز به لیست هست بهتره از list comprehension (روش اول) استفاده بشه
❗️به طور کلی بهتره اگر نیاز به لیست ندارید کد رو طوری بنویسید که با جنریتور(خروجی مستقیم filter,map,...) کار کنه؛ اینطوری حالت ایدهآل هست!
🔎 @py4ds
پست ریپلای و این پست
🔺به طور کلی استفاده از تابع فیلتر به همراه lambda میتونه سرعت رو بیاره پایین
اما اینجا خبری از lambda نیست پس نتیجه هم احتمالا کند نیست
یه بررسی اجمالی داشتم روی حالتهای مختلف:
حالتی که خودم توی کانال گذاشتم هم سریع هست هم تمیز اما حالتی که دوستمون نوشتن برای مواردی که رشته طولانی و تعداد splitها زیاد بشه میتونه کمی(شاید حدود کمتر از ۲-۳ درصد) سریعتر باشه
🔺 توجه کنید که این یه حالت خاص هست و خود پایتون هم توصیه میکنه که اگر نیاز به لیست هست بهتره از list comprehension (روش اول) استفاده بشه
❗️به طور کلی بهتره اگر نیاز به لیست ندارید کد رو طوری بنویسید که با جنریتور(خروجی مستقیم filter,map,...) کار کنه؛ اینطوری حالت ایدهآل هست!
🔎 @py4ds
Telegram
Python for Data Science
🔺 حذف استرینگ خالی در split
>>> s = 'abc,'
>>> s.split(',')
['abc', '']
>>> [item for item in s.split(',') if item]
['abc']
😊 Fast and clean
🔎 @py4ds
>>> s = 'abc,'
>>> s.split(',')
['abc', '']
>>> [item for item in s.split(',') if item]
['abc']
😊 Fast and clean
🔎 @py4ds
👍4
یه مطلب جالب از کانال @py4ds
‼️یکی از قابلیتهای پایتون این هست که شما میتونید کدهایی با سورس بسته تولید کنید اصطلاحا به این مدل کدها کدهای آبفاسکیت یا مبهم شده میگن
❗️کدی که آبفاسکیت میشه میتونه بعد از یک مدت زمان خاص اکسایر بشه و دیگه اجرا نشه یا مثلا فقط از طریق یک ماژول خاص(استارتر) اجرا بشه و ماژولهای دیگهی اون به تنهایی اجرا نشن
❓چرا کد نیاز به کد آبفاسکیت داریم؟ دلایل زیادی ممکنه وجود داشته باشه از جمله توسعه دانشهایی که برای یک شرکت درآمدزایی داره و با عمومی شدنش ممکنه به درآمد شرکت ضربه زیادی وارد بشه. دلیل دیگه اینه که ممکنه ویرایش یک کد باعث اختلال توی الگوریتم از پیش تعیین شده بشه پس برای اینکه از تغییرات جلوگیری بشه اونو آبفاسکیت میکنن
در اینکه آیا این کار مفید هست یا نه میشه بحث کرد. شاید یه جایی واقعا آبفاسکیت کردن ضررش بیشتر از سودش باشه!
اما در مورد پروژه
من قبلا با کدهایی کار میکردم که آبفاسکیت بودن و مبهم شدنشون باعث میشد نشه به متدها و خواص داخلی اشیایی که کدشون آبفاسکیت شده دسترسی داشت
در کل برای کسی که داره از یک کد آبفاسکیت شده استفاده میکنه هیچ چیزی عذاب آور تر از این نیست که بعد از دات چیزی رو نبینه🤯
این پروژه دقیقا چیه؟
یک قالب هست برای کدهایی که قراره آبفاسکیت بشن و در اختیار دیگران قرار بگیرن🫤
چطوری کار میکنه؟
شما باید کدتون رو در قالب یک پکیج پایتونی آماده کنید! یکی از مهمترین بخشهای این کار هم نوشتن فایل setup.py هست😮
👈کد خودتون رو میتونید توی یه پوشه مشابه چیزی که میبینید template/src_pkg بذارید
🫵یادتون باشه که یه پروژه خوب پروژهای هست که بشه متدها و توابع داخلیاش رو هم دید پس بهتره که یه پوشه مثل template/stub_pkg هم داشته باشید و توی اون هم یه فایل setup.py برای پکیج stub بذارید
پکیج stub چیه؟
توصیه میکنم برای درک بهتر pep561 رو بخونید.
خلاصه: این یک پکیج شامل فایلهایی مشابه با ساختار پروژه هست که هیچ کد قابل اجرایی توش نیست و صرفا یک سری فایل با پسوند .pyi توش هست که نام تمام ساختارهایی مثل توابع و کلاسها و همچنین نام و نوع پارامترهای ورودی و نوع خروجی اونها با استفاده از type hinting تعریف شده!
تمام LSP(Language Server Protocol) ها ابتدا دنبال فایلهای .pyi میگردن و ساختار پروژه رو از روی اون به کاربر نشون میدن؛ اگر چنین فایلی وجود نداشت میرن سراغ فایل .py
🫴پس اینجا یه امکان خوب داریم تا ساختار پروژه رو(بدون کدهای داخلی) توش نشون بدیم!
من بلد نیستم فایل .pyi رو بنویسم چیکار کنم؟
پکیج mypy توسط بزرگان پایتون از جمله خود آقای روسوم در حال توسعه هست این پکیج ابزاری(stubgen) داره که میتونید باهاش این فایلها رو ایجاد کنید🤗
تهش رو بگو خسته شدیم!
هیچی دیگه این پروژه ۲ تا پکیج whl براتون میسازه یکی پکیج اصلی شما به صورت آبفاسکیت هست و دیگری هم پکیج stub که هر دو رو میشه با pip نصب کرد
🤌خوبیش اینه که حداقل کد آبفاسکیت رو میشه ورژن زد و روی مخزنهای pipطور، نگهداری کرد و اینکه تغییرات ساختاری اون رو هم با پکیج stub دید!
✅ پکیج pyarmor میتونه کدهای جنگو رو هم آبفاسکیت کنه
خیلی جالب هست
در نهایت یک پروژه جنگویی دارید که فقط میشه اجراش کرد و قابلیت تغییر نداره
🔎 @py4ds
‼️یکی از قابلیتهای پایتون این هست که شما میتونید کدهایی با سورس بسته تولید کنید اصطلاحا به این مدل کدها کدهای آبفاسکیت یا مبهم شده میگن
❗️کدی که آبفاسکیت میشه میتونه بعد از یک مدت زمان خاص اکسایر بشه و دیگه اجرا نشه یا مثلا فقط از طریق یک ماژول خاص(استارتر) اجرا بشه و ماژولهای دیگهی اون به تنهایی اجرا نشن
❓چرا کد نیاز به کد آبفاسکیت داریم؟ دلایل زیادی ممکنه وجود داشته باشه از جمله توسعه دانشهایی که برای یک شرکت درآمدزایی داره و با عمومی شدنش ممکنه به درآمد شرکت ضربه زیادی وارد بشه. دلیل دیگه اینه که ممکنه ویرایش یک کد باعث اختلال توی الگوریتم از پیش تعیین شده بشه پس برای اینکه از تغییرات جلوگیری بشه اونو آبفاسکیت میکنن
در اینکه آیا این کار مفید هست یا نه میشه بحث کرد. شاید یه جایی واقعا آبفاسکیت کردن ضررش بیشتر از سودش باشه!
اما در مورد پروژه
من قبلا با کدهایی کار میکردم که آبفاسکیت بودن و مبهم شدنشون باعث میشد نشه به متدها و خواص داخلی اشیایی که کدشون آبفاسکیت شده دسترسی داشت
در کل برای کسی که داره از یک کد آبفاسکیت شده استفاده میکنه هیچ چیزی عذاب آور تر از این نیست که بعد از دات چیزی رو نبینه🤯
این پروژه دقیقا چیه؟
یک قالب هست برای کدهایی که قراره آبفاسکیت بشن و در اختیار دیگران قرار بگیرن🫤
چطوری کار میکنه؟
شما باید کدتون رو در قالب یک پکیج پایتونی آماده کنید! یکی از مهمترین بخشهای این کار هم نوشتن فایل setup.py هست😮
👈کد خودتون رو میتونید توی یه پوشه مشابه چیزی که میبینید template/src_pkg بذارید
🫵یادتون باشه که یه پروژه خوب پروژهای هست که بشه متدها و توابع داخلیاش رو هم دید پس بهتره که یه پوشه مثل template/stub_pkg هم داشته باشید و توی اون هم یه فایل setup.py برای پکیج stub بذارید
پکیج stub چیه؟
توصیه میکنم برای درک بهتر pep561 رو بخونید.
خلاصه: این یک پکیج شامل فایلهایی مشابه با ساختار پروژه هست که هیچ کد قابل اجرایی توش نیست و صرفا یک سری فایل با پسوند .pyi توش هست که نام تمام ساختارهایی مثل توابع و کلاسها و همچنین نام و نوع پارامترهای ورودی و نوع خروجی اونها با استفاده از type hinting تعریف شده!
تمام LSP(Language Server Protocol) ها ابتدا دنبال فایلهای .pyi میگردن و ساختار پروژه رو از روی اون به کاربر نشون میدن؛ اگر چنین فایلی وجود نداشت میرن سراغ فایل .py
🫴پس اینجا یه امکان خوب داریم تا ساختار پروژه رو(بدون کدهای داخلی) توش نشون بدیم!
من بلد نیستم فایل .pyi رو بنویسم چیکار کنم؟
پکیج mypy توسط بزرگان پایتون از جمله خود آقای روسوم در حال توسعه هست این پکیج ابزاری(stubgen) داره که میتونید باهاش این فایلها رو ایجاد کنید🤗
تهش رو بگو خسته شدیم!
هیچی دیگه این پروژه ۲ تا پکیج whl براتون میسازه یکی پکیج اصلی شما به صورت آبفاسکیت هست و دیگری هم پکیج stub که هر دو رو میشه با pip نصب کرد
🤌خوبیش اینه که حداقل کد آبفاسکیت رو میشه ورژن زد و روی مخزنهای pipطور، نگهداری کرد و اینکه تغییرات ساختاری اون رو هم با پکیج stub دید!
✅ پکیج pyarmor میتونه کدهای جنگو رو هم آبفاسکیت کنه
خیلی جالب هست
در نهایت یک پروژه جنگویی دارید که فقط میشه اجراش کرد و قابلیت تغییر نداره
🔎 @py4ds
Python Enhancement Proposals (PEPs)
PEP 561 – Distributing and Packaging Type Information | peps.python.org
PEP 484 introduced type hinting to Python, with goals of making typing gradual and easy to adopt. Currently, typing information must be distributed manually. This PEP provides a standardized means to leverage existing tooling to package and distribute t...
🔥10👍8🤣2❤1👎1