Python for Data Science
315 subscribers
127 photos
16 videos
12 files
61 links
اطلاعات مفید جهت یادگیری پایتون برای علم داده
Download Telegram
🔺ویژگی ‌add_note to Exceptions

تا حالا شده بخواید توی حالتی که خطا رو مدیریت می‌کنید متن کمکی اضافه کنید؟

❗️برای اینکار باید کمی کثیف کاری کنید و خطایی با پیغام مناسب برای خودتون بسازید اما حالا با ویژگی جدید پایتون 3.11 میتونید به هر خطایی که تولید میشه بدون هیچ کد اضافه‌ای و فقط با یک متد یه متن مناسب اضافه کنید!
سورس کد

این خصوصیت می‌تونه توی کار با کتابخانه‌هایی مثل hypothesis که برای تست نویسی خصوصیتی کاربرد دارن مفید باشه!
#py311
🔎 @py4ds
👏1
Python for Data Science
🔺 ویژگی مهم بعدی برای کسانی که برنامه نویسی async انجام میدن خیلی به درد بخور هست. 👉 Exception Group 💡اگر کدی داشته باشید که به صورت async اجرا میشه و باید خطاهای به وجود اومده توی همه یا برخی از تردها رو مدیریت کنید این ویژگی خیلی بهتون کمک می‌کنه! 📌با این…
🔺مفهوم packing, unpacking توی پایتون از مدتها قبل با استفاده از * شناخته شده بود!

🔹ابتکار جالب این بنیاد در بکارگیری این علامت برای Exception Group ها به نظرم خیلی هوشمندانه هست!

👨🏻‍🏫به نظرم در آموزش پایتون یکی از مهمترین چیزهایی که باید به خوبی رووش تاکید بشه همین علامت و کاربردهای مختلف اون هست!

🔎 @py4ds
👏1
🔺 ویژگی جدید پایتون اضافه شدن دو تابع جدید به کتابخانه داخلی math هست!
۱. تابع exp2 برای محاسبه ۲ به توان x
۲. تابع cbrt برای محاسبه ریشه سوم x

سورس کد
#py311
🔎 @py4ds
👏1
🔺 خوانده فایل‌های TOML
پایتون با PEP 518 در سال ۲۰۱۶ به معرفی فایل pyproject.toml پرداخت این فایل حاوی اطلاعات اضافی در مورد محیط اجرای کد و در واقع یک پیکربندی جداگانه(نسبت به setuptools) برای سیستم ساخت بود. این فایل ساختاری شبیه فایل‌های کانفیگ داره!

🔺شما توی این فایل میتونید تنظیمات دلخواهی رو برای کتابخانه‌هایی مثل black, mypy, isort, pylint و غیره انجام بدید و این کار کیفیت کد توسعه یافته رو خیلی زیاد می‌کنه

🍿 حالا پایتون در نسخه 3.11 با معرفی کتابخونه tomllib به شما این امکان رو میده که هر فایلی با این ساختار رو بخونید و ایجاد کنید!
سورس کد
#py311
🔎 @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
Please open Telegram to view this post
VIEW IN TELEGRAM
Python for Data Science
در رابطه با deque یه کد نمونه براتون میذارم
فرض کنید میخواید یه مجموعه‌ای از آیتمها رو توی خروجی چاپ کنید
این آیتمها اینقدر مهم نیست که همش نیاز باشه چاپ بشه اینقدر هم بی اهمیت نیست که در حد یک خط سریع چاپ کنیم و پاکش کنیم

راه حل چیه؟

بیایم و 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
This media is not supported in your browser
VIEW IN TELEGRAM
👨🏻‍💻فیلم با کیفیت از اجرای کد
🔎 @py4ds
📗 #معرفی_کتاب
Grokking Algorithms
Aditya Bhargava

🔺این کتاب با زبانی بسیار شیوا الگوریتم‌های عمومی در حل مسائل مختلف (مثل جستجوی دودویی، مرتب سازی و غیره) رو توضیح داده

🔺این کتاب به دوستانی که قصد مطالعه کتاب Data Structures & Algorithms in Python رو دارن توصیه میشه.

🔎 @py4ds
🔺چند روزی هست که با کمک یکی از دوستان یه پروژه جالب شروع کردم.

🔹توی این پروژه میتونید از پوشه یک پکیج از قبل آماده شده، دو پکیج whl که یکی به صورت obfuscate شده (اصلی) و یکی فقط شامل interfaces ساختارها هست بسازید.

👈پروژه اینجاست هنوز README اش آماده نشده ولی میتونید فعلا یه نگاه بهش بندازید.

در روزهای آینده بیشتر در موردش صحبت می‌کنم.
🔎 @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
🔺 حذف استرینگ خالی در split

>>> s = 'abc,'
>>> s.split(',')
['abc', '']
>>> [item for item in s.split(',') if item]
['abc']

😊 Fast and clean

🔎 @py4ds
👍2
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
💥 حذف استرینگ خالی در split


>>> s = 'سایر رسانه ها,'
>>> s.split(',')
['سایر رسانه ها', '']
>>> list(filter(None, s.split(',')))
['سایر رسانه ها']

❤️ @SeYeD_BaX
Please open Telegram to view this post
VIEW IN TELEGRAM
سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی
💥 حذف استرینگ خالی در split >>> s = 'سایر رسانه ها,' >>> s.split(',') ['سایر رسانه ها', ''] >>> list(filter(None, s.split(','))) ['سایر رسانه ها'] ❤️ @SeYeD_BaX
🎯یه مقایسه روی این دوتا روش داشته باشیم
پست ریپلای و این پست

🔺به طور کلی استفاده از تابع فیلتر به همراه lambda می‌تونه سرعت رو بیاره پایین

اما اینجا خبری از lambda نیست پس نتیجه هم احتمالا کند نیست

یه بررسی اجمالی داشتم روی حالت‌های مختلف:
حالتی که خودم توی کانال گذاشتم هم سریع هست هم تمیز اما حالتی که دوستمون نوشتن برای مواردی که رشته طولانی و تعداد splitها زیاد بشه می‌تونه کمی(شاید حدود کمتر از ۲-۳ درصد) سریعتر باشه

🔺 توجه کنید که این یه حالت خاص هست و خود پایتون هم توصیه می‌کنه که اگر نیاز به لیست هست بهتره از list comprehension (روش اول) استفاده بشه

❗️به طور کلی بهتره اگر نیاز به لیست ندارید کد رو طوری بنویسید که با جنریتور(خروجی مستقیم filter,map,...) کار کنه؛ اینطوری حالت ایده‌آل هست!

🔎 @py4ds
🔥4
Python for Data Science
🔺چند روزی هست که با کمک یکی از دوستان یه پروژه جالب شروع کردم. 🔹توی این پروژه میتونید از پوشه یک پکیج از قبل آماده شده، دو پکیج whl که یکی به صورت obfuscate شده (اصلی) و یکی فقط شامل interfaces ساختارها هست بسازید. 👈پروژه اینجاست هنوز README اش آماده نشده…
🔺قبلا در این مورد صحبت کرده بودم
اما الان میخوام بیشتر توضیح بدم

‼️یکی از قابلیت‌های پایتون این هست که شما میتونید کدهایی با سورس بسته تولید کنید اصطلاحا به این مدل کدها کدهای آبفاسکیت یا مبهم شده میگن

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

چرا کد نیاز به کد آبفاسکیت داریم؟ دلایل زیادی ممکنه وجود داشته باشه از جمله توسعه دانشهایی که برای یک شرکت درآمدزایی داره و با عمومی شدنش ممکنه به درآمد شرکت ضربه زیادی وارد بشه. دلیل دیگه اینه که ممکنه ویرایش یک کد باعث اختلال توی الگوریتم از پیش تعیین شده بشه پس برای اینکه از تغییرات جلوگیری بشه اونو آبفاسکیت میکنن

در اینکه آیا این کار مفید هست یا نه میشه بحث کرد. شاید یه جایی واقعا آبفاسکیت کردن ضررش بیشتر از سودش باشه!

اما در مورد پروژه
من قبلا با کدهایی کار میکردم که آبفاسکیت بودن و مبهم شدنشون باعث میشد نشه به متدها و خواص داخلی اشیایی که کدشون آبفاسکیت شده دسترسی داشت
در کل برای کسی که داره از یک کد آبفاسکیت شده استفاده می‌کنه هیچ چیزی عذاب آور تر از این نیست که بعد از دات چیزی رو نبینه🤯


این پروژه دقیقا چیه؟
یک قالب هست برای کدهایی که قراره آبفاسکیت بشن و در اختیار دیگران قرار بگیرن🫤

چطوری کار می‌کنه؟
شما باید کدتون رو در قالب یک پکیج پایتونی آماده کنید! یکی از مهمترین بخش‌های این کار هم نوشتن فایل 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 دید!
🤝

🔎 @py4ds
👏4