🐍 Python & Raspberry 🐍
8.21K subscribers
1.92K photos
125 videos
623 files
1.23K links
Python- Raspberry Pi-AI-IOT
ادمین : فرهاد ناصری زاده
@farhad_naserizadeh
@farhad3412

گروه پایتون
@Python_QA
تبادل
@mmtahmasbi
کانال مرتبط
@new_mathematical
@micropython_iot
@c_micro
اینستاگرام
http://Instagram.com/python_raspberry
Download Telegram
✔️ سوال.

بهترین راه برای فهمیدن اینکه یه آبجکت hashable هست، چیه؟!

جوابتون رو کامنت کنید.

پاسخش رو فردا میگذارم.

#M4hdi
〰️〰️〰️〰️〰️〰️
©@raspberry_python
خب شاید پیش خودتون بگید، آبجکتی که داندر hash داشته باشه حتما hashable عه دیگه، این داندر رو داره و جوابتون این باشه:

o = obj
if hasattr(o, '__hash__'):
print(f"{o} is hashable")

اما خیر 😁

اول یه چیز پایه‌ای بگیم.
کلاس آبجکت object پایه‌ای ترین base class در پایتونه و اینکه میگن همه‌چیز در پایتون آبجکته، یکی از دلیلاش اینه. هر چیزی که فکرش رو بکنید از object ارث می‌بره.

این کلاس کلی داندر متد داره و از قضا دو تا داندر که در این مطلب برای ما مهم هستن رو هم با هم داره

داندر eq -> برای چک کردن تساوی دو تا آبجکت
obj1 == obj2
داندر hash -> برای برگرداندن مقدار hash آبجکت که از تابع hash میگیریم
hash(obj)

وقتی یک کلاسی شما می‌نویسید:
class Spam:
pass

این کلاس به طور خودکار از کلاس آبجکت ارث می‌بره که تبعا داندر متد‌ها براش resolve میشن، که یعنی، ارث‌‌شون میبره، یا اینکه میگرده توی کلاس object پیدا شون میکنه.

نکته‌ی داندر eq
رفتار پیش‌فرض داندر eq به این صورته که میان آیدی‌های دو آبجکت رو باهم مقایسه میکنه. یعنی اگه اون رو override نکرده باشید و بخواید آبجکت‌هاتون رو با هم مقایسه کنید، وقتی جواب True میگیرید که دو تا آبجکت در واقع یک آبجکت باشن. دقیقا همون کاری که is انجام میده.

s1 = s2 = Spam()
s1 == s2 -> True

اما شاید چنین رفتاری رو نخواید و جور دیگه‌ای بخوایید که آبجکت‌های شما تساوی‌شون چک بشه
خب میاید داندر eq رو جوری که میخواید اورراید میکنید

اما 😁

وقتی این کار رو کردید، اتفاقی که میوفته اینه که مقدار داندر hash شما None میشه و آبجکت شما دیگه hashable نیست
این یعنی دیگه نمی‌تونید توی دیکشنری و ست بذاریدش و ....

این در حالیه که آبجکت شما همچنان داندر hash داره ولی hashable نیست.

این توضیحات میشن دلیل اینکه چرا اون شرط باگ داره.

اما راه‌حل چیه؟
خب شاید بیاید بگید بجای اینکه چک کنیم هست، چک میکنیم که None نباشه

if o.__hash__ is not None:
...

این تا حدی مشکل رو حل میکنه اما از اونجایی که پایتون یه زبان به شدت داینامیک عه:

class Spam:
def __eq__(self): ...

Spam.hash = "Gotcha, Im neither hashable nor None =)"

پس بهترین راه‌حل چیه؟
It is easier to ask forgiveness than permission

try:
hash(o)
except TypeError:
print("unhashable")
else:
print("hashable")

اما یه سوال بی جواب میمونه!
بالاتر گفتیم اگه داندر eq رو اورراید کنیم آبجکت ما دیگه hashable نیست و توی ست و دیکشنری نمی‌تونیم استفاده کنیم. من میخوام اون ور اورراید کنم و بازم hashable باشه 😒😒

خب جوابش ساده‌ست

شما باید داندر hash رو هم اورراید کنید و یه مقدار int برگردونید

نکته‌ای که هست و باید بهش توجه داشته باشید اینه که باید بتونید یه عددی تولید کنید که تکراری شدنش سخت باشه (اگه تکراری بشه اشکالی نداره) و به ویژگی‌های آبجکت شما وابسته هم باشه (حتما قرار نیست به ویژگی‌هاش وابسته باشه، اما اگه باشه، اون نکته‌ی قبلی راحت‌تر بدست میاد)

برای مثال
class Spam:
def __init__(self, name):
self.name = name

def __eq__(self):
...

def __hash__(self):
return hash(self.name)

تبعا شما اسامی مختلفی قراره به هر آبجکت که از Spam درست میکنید بدید، و این باعث میشه که hash هر بار فرق کنه

اما اگه اسم یکسان هم بدید، مشکلی نیست یه قانونی هست توی بحث hash که میگه:
اگر دو آبجکت دقیقا یکسان باشن، (یعنی دو تا رفرنس از یک آبجکت رو داشته باشیم) باید hash یکسانی داشته باشن
اما اگر ما دو تا hash یکسان از دو تا آبجکت داشتیم، الزاما اون دو آبجکت یکی نیستن.

به این حالت که هش یکسانه ولی آبجکتا یکی نیستن، میگن hash collision. که پایتون خودش این رو هندل میکنه
و بحثش در این مقال "دیگر 😮‍💨" نمیگنجد.

موفق باشید 😁✌️

#M4hdi
〰️〰️〰️〰️〰️〰️〰️
©@raspberry_python
رهایی از دوراهی سخت؛ هم تنسورفلو، هم پایتورچ با IVY

تا به حال احتمالا با چالش سخت انتخاب بین تنسورفلو و پای‌تورچ مواجه شده باشید. اخیرا با اضافه شدن Jax هم این انتخاب سخت‌تر شده. اما تیم unifyai یه فریم‌ورک جدید به نام IVY معرفی کرده که یک syntax یکپارچه برای توسعه مدل‌های دیپ داره و صرفا با تنظیم backend این پکیج روی هر یک از فریم‌ورک‌های تنسورفلو، پای‌تورچ و یا jax می‌تونید از عایدات همون ابزار بهره‌مند بشید. البته این فریم‌ورک در مسیر توسعه است و با توجه به عمر کوتاهش اما تعداد استار بسیار زیادی گرفته که نشون میده به نظر راه درستی رو داره میره.

لینک گیت‌هاب:
https://github.com/unifyai/ivy

@raspberry_python
‏وارد این سایت بشید و رفرش کنید.
هر بار که رفرش میکنید یه چهره با بالاترین جزئیات که غیر واقعیه و با هوش مصنوعی ساخته شده میبینید!

https://thispersondoesnotexist.com/

@raspberry_python
🎥 دانلود رایگان فیلم «مسیر یادگیری علم داده (Data Science)»

در این فیلم 16 دقیقه‌ای تمام مسیر یادگیری #دیتا_ساینس را بررسی خواهیم کرد

مخاطبان:
🔸 دانشجویان و فارغ‌التحصیلان کلیه رشته‌های تحصیلی
🔹 علاقمندان #علم_داده و تحلیلگری داده
🔸 علاقمندان پیشرفت شغلی یا تحصیلی

🌟 این فیلم را با دوستان خود نیز به اشتراک بگذارید...
Forwarded from Persian python (Mohammad)
سلام دوستان وقتتون بخیر
ویدیو پلی لیست آموزش برنامه نویسی شئ گرایی آپلود شد
قسمت 5
موضوع :
اضافه کردن عمگر های منتطقی (>، < ، >=، <=)
روش سریعتر و بهتر بجای اضافه کردن همه ی توابع منطقی
شرط گذاشتن برای True و False بودن تابع bool
اضافه کردن قسمت len به کلاس


امیدوارم که مفید بوده باشه
میتونین از لینک زیر تماشا کنید
https://youtu.be/MfsaTjJoG98
لینک گیت هاب :
https://github.com/persianpython/PythonObjectOriented
h2t - HTTP Hardening Tool

h2t is a simple tool to help sysadmins to hardening their websites.

Install:
$ git clone https://github.com/gildasio/h2t
$ cd h2t
$ pip install -r requirements.txt
$ ./h2t.py -h

@raspberry_python
Forwarded from Persian python (Mohammad)
#تمرین_شئ_گرایی

تمرین سوم

1. یک کلاس با اسم Contact بسازید
که شامل 5 instance attribute باشد
به اسم :
name,last_name , phone=None, email=None, display_mode="masked"


2. آبجکت های شما باید قابلیت استفاده از عملگر مساوی را داشته باشند
شرط های لازم برای مساوی بودن :
phone , email مقدار None نداشته باشند
و مساوی باشند
یا
name, last_name باهم مساوی باشند

3. آبجکت رو نسبت به name last_name phone email
hashable کنید

4. یک تابع بنویسید که یک کلمه ورودی بگیره و فقط 2 حروف اول رو برداره و جای بقیه حروف ها * بزاره
و return کنه
میتونید از اسم obfuscated استفاده کنید (مبهم)

5. وقتی آبجکت رو با فرمت صدا میزنید
بیاد display_mode رو چک کنه
اگر masked بود
دیتاهارو به صورت مبهم نمایش بده
Contact(name='Mo******', last_name='fa*****')
و یا اگر unmasked بود
دیتاهارو کامل نمایش بده
Contact(name='Mohammad', last_name='fadakar')

6. وقتی از تابع repr استفاده میکنید
نسبت به متغیر disply_mode
بیاد از فرمت ها استفاده کنه

7. وقتی از تابع str
روی آبجکت استفاده میکنید فقط حروف اول اسم و فامیل به صورت بزرگ return کنه


این تمرین برای درک بهتر فرمت ها و
repr و str هستش

جواب این سوال در گیت هاب قرار گرفته است
https://github.com/persianpython/PythonObjectOriented
Ghomar Baz
Mohsen Chavoshi - SubSeda.IR
خارج از علم

قمار باز
محسن چاووشی
🟢🟡🔴 Color Stealing

Python implementation of the Color Stealing algorithm
.



https://github.com/davidsvy/color-stealing




https://github.com/davidsvy/color-stealing#generated-samples




@raspberry_python
🎲 Denoising Diffusion Probabilistic Model, in Pytorch


Install: $ pip install denoising_diffusion_pytorch


https://github.com/lucidrains/denoising-diffusion-pytorch



https://www.youtube.com/watch?v=W-O7AZNzbzQ



@raspberry_python
ایا امکان دارد عبارت زیر درست باشد؟
`10/a == 0`
Anonymous Quiz
50%
امکان دارد
27%
امکان ندارد
23%
نمیدونم دیدن جواب
کاریکاتور هوش مصنوعی دیدین؟
یک تیم خلاق ایرانی یک سایت با هوش مصنوعی درست کردند که عکس رو میگیره و کاریکاتور تحویل میده😍

پیشنهاد میکنم همین الآن امتحان کنین. خیلی جالبه👏👏
سایت فانیکاتور:
https://funnycature.ali110co.ir

#پایتون #هوش_مصنوعی
🆔 Reference:
@ali110co_ir | @OpenCV_olc
@raspberry_python
سلام بچه‌ها. این برای یکی از دوستانه، واسه امکان‌سنجی یه پلتفرم. اگه دوست داشتید، ممنون می‌شم پرش کنید.
https://survey.porsline.ir/s/9NKUTQN