بالاخره نسخه پایدار پایتون 3.11 منتشر شد.
به زودی مجموعه پستهای کوتاهی در مورد برخی ویژگیهای جدیدش براتون ارسال میکنم.
🔎 @py4ds
به زودی مجموعه پستهای کوتاهی در مورد برخی ویژگیهای جدیدش براتون ارسال میکنم.
🔎 @py4ds
🔥1
🔺 اولین گام از مقایسه امکانات جدید پایتون 3.11 مقایسه در عملکرد اون هست.
🔹این نسخه از پایتون با استفاده از پروژهی Faster CPython سرعت خیلی بهتری نسبت به نسخه قبل پیدا کرده(البته در مجموع بنیاد پایتون از نسخه 3.8 به بعد تمرکز اصلی خودش رو روی بهبود عملکرد گذاشته)
👨💻تصویر بالا نمونهای از مقایسه عملکرد پایتون 3.11 با 3.10 هست که با استفاده از این پروژه انجامش دادم.
توی پروژه فوق میتونید با در نظر گرفتن یه سری نکته هر نسخهای رو با نسخه دیگه مقایسه کنید!
📊نتیجهی این مقایسه بهبود حدود بیست درصدی رو نشون میده که با توجه به اجرا شدن در محیط داکر به نظر میرسه همون عدد رسمی ذکر شده(۲۵ درصد) درست هست و همونطور که در تصویر میبینید بعضی ماژولها بیش از ۵۰ درصد بهبود عملکرد دارن!
#py311
🔎 @py4ds
🔹این نسخه از پایتون با استفاده از پروژهی Faster CPython سرعت خیلی بهتری نسبت به نسخه قبل پیدا کرده(البته در مجموع بنیاد پایتون از نسخه 3.8 به بعد تمرکز اصلی خودش رو روی بهبود عملکرد گذاشته)
👨💻تصویر بالا نمونهای از مقایسه عملکرد پایتون 3.11 با 3.10 هست که با استفاده از این پروژه انجامش دادم.
توی پروژه فوق میتونید با در نظر گرفتن یه سری نکته هر نسخهای رو با نسخه دیگه مقایسه کنید!
📊نتیجهی این مقایسه بهبود حدود بیست درصدی رو نشون میده که با توجه به اجرا شدن در محیط داکر به نظر میرسه همون عدد رسمی ذکر شده(۲۵ درصد) درست هست و همونطور که در تصویر میبینید بعضی ماژولها بیش از ۵۰ درصد بهبود عملکرد دارن!
#py311
🔎 @py4ds
👍4
🔺 بهبود پیغامهای خطا یکی از بهترین تغییرات در پایتون 3.11 هست.
💡همون طور که میبینید دقیقا به محلی از کد که در اون خطا رخ داده اشاره میکنه!
🔹نوشتن کدهای پایتونی با استفاده از عبارات(که ممکنه گاهی هم طولانی بشه) باعث شده بود که پیدا کردن محل دقیق خطا در یک عبارت قدری مشکل باشه که این مشکل با این تغییر حل شد!
سورس کد
#py311
🔎 @py4ds
💡همون طور که میبینید دقیقا به محلی از کد که در اون خطا رخ داده اشاره میکنه!
🔹نوشتن کدهای پایتونی با استفاده از عبارات(که ممکنه گاهی هم طولانی بشه) باعث شده بود که پیدا کردن محل دقیق خطا در یک عبارت قدری مشکل باشه که این مشکل با این تغییر حل شد!
سورس کد
#py311
🔎 @py4ds
👏1
🔺 ویژگی مهم بعدی برای کسانی که برنامه نویسی async انجام میدن خیلی به درد بخور هست.
👉 Exception Group
💡اگر کدی داشته باشید که به صورت async اجرا میشه و باید خطاهای به وجود اومده توی همه یا برخی از تردها رو مدیریت کنید این ویژگی خیلی بهتون کمک میکنه!
📌با این ویژگی میشه به صورت یکجا تمام خطاهای به وجود اومده از طریق مثلا asyncio.gather رو برگردوند!
📃 در این کد (با کامنت تابع خط ۳۹ و آنکامنت تابع خط ۳۵) چند تابع مختلف به صورت async (و مستقل از هم) اجرا شده و اونها هم خطا دادن؛ خطاهای Exception Group توی تصویر بالا نشون داده شده!
❓سوال: چطوری Exception Group رو هندل کنیم؟ آیا الگوی try-except جواب میده؟
❗️جواب: خیر! برای مدیریت Exception Group ها باید تمام except ها رو به صورت *except بنویسید!
🔹سورس این کد نمونهای از مدیریت خطای Exception Group هست!
#py311
🔎 @py4ds
👉 Exception Group
💡اگر کدی داشته باشید که به صورت async اجرا میشه و باید خطاهای به وجود اومده توی همه یا برخی از تردها رو مدیریت کنید این ویژگی خیلی بهتون کمک میکنه!
📌با این ویژگی میشه به صورت یکجا تمام خطاهای به وجود اومده از طریق مثلا asyncio.gather رو برگردوند!
📃 در این کد (با کامنت تابع خط ۳۹ و آنکامنت تابع خط ۳۵) چند تابع مختلف به صورت async (و مستقل از هم) اجرا شده و اونها هم خطا دادن؛ خطاهای Exception Group توی تصویر بالا نشون داده شده!
❓سوال: چطوری Exception Group رو هندل کنیم؟ آیا الگوی try-except جواب میده؟
❗️جواب: خیر! برای مدیریت Exception Group ها باید تمام except ها رو به صورت *except بنویسید!
🔹سورس این کد نمونهای از مدیریت خطای Exception Group هست!
#py311
🔎 @py4ds
👏1
🔺ویژگی add_note to Exceptions
تا حالا شده بخواید توی حالتی که خطا رو مدیریت میکنید متن کمکی اضافه کنید؟
❗️برای اینکار باید کمی کثیف کاری کنید و خطایی با پیغام مناسب برای خودتون بسازید اما حالا با ویژگی جدید پایتون 3.11 میتونید به هر خطایی که تولید میشه بدون هیچ کد اضافهای و فقط با یک متد یه متن مناسب اضافه کنید!
سورس کد
این خصوصیت میتونه توی کار با کتابخانههایی مثل hypothesis که برای تست نویسی خصوصیتی کاربرد دارن مفید باشه!
#py311
🔎 @py4ds
تا حالا شده بخواید توی حالتی که خطا رو مدیریت میکنید متن کمکی اضافه کنید؟
❗️برای اینکار باید کمی کثیف کاری کنید و خطایی با پیغام مناسب برای خودتون بسازید اما حالا با ویژگی جدید پایتون 3.11 میتونید به هر خطایی که تولید میشه بدون هیچ کد اضافهای و فقط با یک متد یه متن مناسب اضافه کنید!
سورس کد
این خصوصیت میتونه توی کار با کتابخانههایی مثل hypothesis که برای تست نویسی خصوصیتی کاربرد دارن مفید باشه!
#py311
🔎 @py4ds
👏1
Python for Data Science
🔺 ویژگی مهم بعدی برای کسانی که برنامه نویسی async انجام میدن خیلی به درد بخور هست. 👉 Exception Group 💡اگر کدی داشته باشید که به صورت async اجرا میشه و باید خطاهای به وجود اومده توی همه یا برخی از تردها رو مدیریت کنید این ویژگی خیلی بهتون کمک میکنه! 📌با این…
🔺مفهوم packing, unpacking توی پایتون از مدتها قبل با استفاده از
🔹ابتکار جالب این بنیاد در بکارگیری این علامت برای Exception Group ها به نظرم خیلی هوشمندانه هست!
👨🏻🏫به نظرم در آموزش پایتون یکی از مهمترین چیزهایی که باید به خوبی رووش تاکید بشه همین علامت و کاربردهای مختلف اون هست!
🔎 @py4ds
*
شناخته شده بود!🔹ابتکار جالب این بنیاد در بکارگیری این علامت برای Exception Group ها به نظرم خیلی هوشمندانه هست!
👨🏻🏫به نظرم در آموزش پایتون یکی از مهمترین چیزهایی که باید به خوبی رووش تاکید بشه همین علامت و کاربردهای مختلف اون هست!
🔎 @py4ds
👏1
🔺 خوانده فایلهای TOML
پایتون با PEP 518 در سال ۲۰۱۶ به معرفی فایل pyproject.toml پرداخت این فایل حاوی اطلاعات اضافی در مورد محیط اجرای کد و در واقع یک پیکربندی جداگانه(نسبت به setuptools) برای سیستم ساخت بود. این فایل ساختاری شبیه فایلهای کانفیگ داره!
🔺شما توی این فایل میتونید تنظیمات دلخواهی رو برای کتابخانههایی مثل black, mypy, isort, pylint و غیره انجام بدید و این کار کیفیت کد توسعه یافته رو خیلی زیاد میکنه
🍿 حالا پایتون در نسخه 3.11 با معرفی کتابخونه tomllib به شما این امکان رو میده که هر فایلی با این ساختار رو بخونید و ایجاد کنید!
سورس کد
#py311
🔎 @py4ds
پایتون با PEP 518 در سال ۲۰۱۶ به معرفی فایل pyproject.toml پرداخت این فایل حاوی اطلاعات اضافی در مورد محیط اجرای کد و در واقع یک پیکربندی جداگانه(نسبت به setuptools) برای سیستم ساخت بود. این فایل ساختاری شبیه فایلهای کانفیگ داره!
🔺شما توی این فایل میتونید تنظیمات دلخواهی رو برای کتابخانههایی مثل black, mypy, isort, pylint و غیره انجام بدید و این کار کیفیت کد توسعه یافته رو خیلی زیاد میکنه
🍿 حالا پایتون در نسخه 3.11 با معرفی کتابخونه tomllib به شما این امکان رو میده که هر فایلی با این ساختار رو بخونید و ایجاد کنید!
سورس کد
#py311
🔎 @py4ds
👏1
Python for Data Science
🔺 خوانده فایلهای TOML پایتون با PEP 518 در سال ۲۰۱۶ به معرفی فایل pyproject.toml پرداخت این فایل حاوی اطلاعات اضافی در مورد محیط اجرای کد و در واقع یک پیکربندی جداگانه(نسبت به setuptools) برای سیستم ساخت بود. این فایل ساختاری شبیه فایلهای کانفیگ داره! 🔺شما…
🔹 توی سورس کد بالا یه اشاره کوچیک هم به متد بهبودیافته datetime کردم که حالا در پایتون 3.11 میتونه فرمتهای مختلف ISO8601 رو تبدیل به آبجکت پایتونی زمان کنه!😅
🔎 @py4ds
🔎 @py4ds
👏1
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
یک لیستی میخوایم داشته باشیم که تعداد مشخصی داده بگیره و اگر اضافه تر بشه از اولش حذف کنه اینطوری اگر داده ای رو اضافه کنیم به اندازه طول لیستمون میمونه و بعدش حذف میشه
راه حل ساخت چنین لیستی چی هستش ؟یک راهکار ساده اینه که با اینسرت به ایندکس صفرم اضافه کنیم و بعد دوباره محتوای لیست رو بهش بدیم به همون تعداد که میخوایم
def list_insert(item, limited_list):
limited_list.insert(0, item)
return limited_list[:10]
ids = []
ids = list_insert(1, ids)
اما یک راهکار بهتر هم هست😚
import collections
ids = collections.deque(maxlen=10)
به همین راحتی. الان ids یک لیسته که میتونید توش دیتا اضافه کنید و مثلا اگر اعداد یک تا ده اضافه کنید وقتی ۱۱ اضافه میکنید یک پاک میش
🖥 @SEYED_BAX
راه حل ساخت چنین لیستی چی هستش ؟یک راهکار ساده اینه که با اینسرت به ایندکس صفرم اضافه کنیم و بعد دوباره محتوای لیست رو بهش بدیم به همون تعداد که میخوایم
def list_insert(item, limited_list):
limited_list.insert(0, item)
return limited_list[:10]
ids = []
ids = list_insert(1, ids)
اما یک راهکار بهتر هم هست
import collections
ids = collections.deque(maxlen=10)
به همین راحتی. الان ids یک لیسته که میتونید توش دیتا اضافه کنید و مثلا اگر اعداد یک تا ده اضافه کنید وقتی ۱۱ اضافه میکنید یک پاک میش
🖥 @SEYED_BAX
Please open Telegram to view this post
VIEW IN TELEGRAM
سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی
یک لیستی میخوایم داشته باشیم که تعداد مشخصی داده بگیره و اگر اضافه تر بشه از اولش حذف کنه اینطوری اگر داده ای رو اضافه کنیم به اندازه طول لیستمون میمونه و بعدش حذف میشه راه حل ساخت چنین لیستی چی هستش ؟یک راهکار ساده اینه که با اینسرت به ایندکس صفرم اضافه…
در رابطه با deque یه کد نمونه براتون میذارم
Python for Data Science
در رابطه با deque یه کد نمونه براتون میذارم
فرض کنید میخواید یه مجموعهای از آیتمها رو توی خروجی چاپ کنید
این آیتمها اینقدر مهم نیست که همش نیاز باشه چاپ بشه اینقدر هم بی اهمیت نیست که در حد یک خط سریع چاپ کنیم و پاکش کنیم
راه حل چیه؟
بیایم و n آیتمها آخر رو توی خروجی چاپ کنیم برای اینکار باید بتونیم خطوط قبلی رو هم پاک کنیم
کد زیر نمونهای از استفاده از deque برای نگهداری خطوط چاپ شدهی قبل (تا nخط) هست
سورس کد
#آموزش
🔎 @py4ds
این آیتمها اینقدر مهم نیست که همش نیاز باشه چاپ بشه اینقدر هم بی اهمیت نیست که در حد یک خط سریع چاپ کنیم و پاکش کنیم
راه حل چیه؟
بیایم و n آیتمها آخر رو توی خروجی چاپ کنیم برای اینکار باید بتونیم خطوط قبلی رو هم پاک کنیم
کد زیر نمونهای از استفاده از deque برای نگهداری خطوط چاپ شدهی قبل (تا nخط) هست
from collections import deque
from random import choices, randint
from string import ascii_letters
from sys import stdout
from time import sleep
deq = deque(maxlen=5)
delay = 0.15
sep = " "
def get_random_items(num):
n = randint(2, 10)
return [num, *choices(ascii_letters, k=n)]
args_list = [get_random_items(i) for i in range(50)]
for args in args_list:
# clear last print lines
for _ in range(len(deq)):
stdout.write("\x1b[1A\x1b[2K") # move up cursor and delete whole line
# prepare new lines
deq.append(
sep.join(map(lambda x: str(x), args))
) # remove first element and append new to the end
# re-print the lines
stdout.write("\n".join(deq) + "\n")
sleep(delay)
سورس کد
#آموزش
🔎 @py4ds
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔺 یه نسخه اولیه از کتابخونه komet رو توی pypi منتشر کردم.
این کتابخونه رو میتونید با دستور زیر نصب کنید
pip install komet
نمونه کد زیر نشون میده که این کتابخونه چطوری کار میکنه
from komet import TailPrint
tprint = TailPrint(max_count=10, delay=0.15)
tprint("#### Step 1 ####")
for i in range(50):
tprint(i, end=" * " if i % 2 == 0 else "\n")
tprint("#### Step 2 ####")
tp2 = TailPrint(5) # override by previous instance (singleton)
for i in range(200, 250):
tp2(i)
این کتابخونه که بر اساس کدی که دیروز منتشر کرده بودم با استفاده از یک deque و الگوی Singleton یه آبجکت بهتون میده که میتونید به جای پرینت معمولی ازش استفاده کنید
این کتابخونه هیچ پیشنیازی نداره و به صورت خالص با خود پایتون نوشته شده همچنین سعی کردم از دستورات جدیدتر استفاده نکنم که با پایتونهای +۳.۷ هم سازگار باشه
پ.ن: روی ۳.۶ تست نکردم ولی احتمالا مشکلی نداشته باشه
🔎 @py4ds
این کتابخونه رو میتونید با دستور زیر نصب کنید
pip install komet
نمونه کد زیر نشون میده که این کتابخونه چطوری کار میکنه
from komet import TailPrint
tprint = TailPrint(max_count=10, delay=0.15)
tprint("#### Step 1 ####")
for i in range(50):
tprint(i, end=" * " if i % 2 == 0 else "\n")
tprint("#### Step 2 ####")
tp2 = TailPrint(5) # override by previous instance (singleton)
for i in range(200, 250):
tp2(i)
این کتابخونه که بر اساس کدی که دیروز منتشر کرده بودم با استفاده از یک deque و الگوی Singleton یه آبجکت بهتون میده که میتونید به جای پرینت معمولی ازش استفاده کنید
این کتابخونه هیچ پیشنیازی نداره و به صورت خالص با خود پایتون نوشته شده همچنین سعی کردم از دستورات جدیدتر استفاده نکنم که با پایتونهای +۳.۷ هم سازگار باشه
پ.ن: روی ۳.۶ تست نکردم ولی احتمالا مشکلی نداشته باشه
🔎 @py4ds
This media is not supported in your browser
VIEW IN TELEGRAM
👨🏻💻فیلم با کیفیت از اجرای کد
🔎 @py4ds
🔎 @py4ds
📗 #معرفی_کتاب
Grokking Algorithms
Aditya Bhargava
🔺این کتاب با زبانی بسیار شیوا الگوریتمهای عمومی در حل مسائل مختلف (مثل جستجوی دودویی، مرتب سازی و غیره) رو توضیح داده
🔺این کتاب به دوستانی که قصد مطالعه کتاب Data Structures & Algorithms in Python رو دارن توصیه میشه.
🔎 @py4ds
Grokking Algorithms
Aditya Bhargava
🔺این کتاب با زبانی بسیار شیوا الگوریتمهای عمومی در حل مسائل مختلف (مثل جستجوی دودویی، مرتب سازی و غیره) رو توضیح داده
🔺این کتاب به دوستانی که قصد مطالعه کتاب Data Structures & Algorithms in Python رو دارن توصیه میشه.
🔎 @py4ds
🔺چند روزی هست که با کمک یکی از دوستان یه پروژه جالب شروع کردم.
🔹توی این پروژه میتونید از پوشه یک پکیج از قبل آماده شده، دو پکیج whl که یکی به صورت obfuscate شده (اصلی) و یکی فقط شامل interfaces ساختارها هست بسازید.
👈پروژه اینجاست هنوز README اش آماده نشده ولی میتونید فعلا یه نگاه بهش بندازید.
در روزهای آینده بیشتر در موردش صحبت میکنم.
🔎 @py4ds
🔹توی این پروژه میتونید از پوشه یک پکیج از قبل آماده شده، دو پکیج whl که یکی به صورت obfuscate شده (اصلی) و یکی فقط شامل interfaces ساختارها هست بسازید.
👈پروژه اینجاست هنوز README اش آماده نشده ولی میتونید فعلا یه نگاه بهش بندازید.
در روزهای آینده بیشتر در موردش صحبت میکنم.
🔎 @py4ds
🔺 یک ویژگی جدید در پایتون ۳.۱۱
بعضی وقتا نیاز هست برای انجام یک کار فرعی، پوشهی کار فعلی رو تغییر بدیم به یه آدرس دیگه و کارمون رو انجام بدیم و دوباره برگردیم به پوشه اصلی.
🔹یه راه ساده اینه که از روش زیر استفاده کنیم
🔸توی پایتون 3.11 یه context manager برای این کار به صورت زیر اضافه شده:
به همین راحتی و تمیزی!
#py311
🔎 @py4ds
بعضی وقتا نیاز هست برای انجام یک کار فرعی، پوشهی کار فعلی رو تغییر بدیم به یه آدرس دیگه و کارمون رو انجام بدیم و دوباره برگردیم به پوشه اصلی.
🔹یه راه ساده اینه که از روش زیر استفاده کنیم
import os
from contexlib import contextmanager
@contextmanager
def enter_dir(path):
old_path = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(old_path)
🔸توی پایتون 3.11 یه context manager برای این کار به صورت زیر اضافه شده:
import os
from contextlib import chdir
print('before:', os.getcwd())
# before: /home/py4ds
with chdir('/'):
print('inside:', os.getcwd())
# inside: /
print('after:', os.getcwd())
# after: /home/py4ds
به همین راحتی و تمیزی!
#py311
🔎 @py4ds
👍4