🐍 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
۳۰۰ به بالا دستور تخلیه شهر میدن
و ۵۰۰ به بالارو کلا ایندکس نمیکنن :))))

البته این فقط به تهران منتهی نمیشه
تبریز و ارومیه هم طوفان نمک اومده
حتی زنجان هم هواش شدیدا گرد و خاک گرفته
@raspberry_python
‏چیزی که امروز به نام ‎اعداد انگلیسی شناخته می‌شوند، برگرفته از شیوهٔ عددنگاری باستانی هندی-پارسی است. اروپایی‌ها از طریق کتاب «حساب الهندی» نوشته ‎خوارزمی دانشمند ایرانی، با این شیوهٔ نگارش اعداد آشنا شدند، آن را برای خود برداشتند و به اسم اعداد انگلیسی معرفی کردند!

@raspberry_python
✔️ کلاس filter

کلاس filter یکی از تایپ‌های built-in پایتون هست.
در filter ما دوتا پارامتر داریم، اولین پارامتر یا یک تابع هست یا None، و دومین پارامتر یک iterable (مثلا لیست، تاپل و ...)؛ حالا filter چیکار میکنه با این‌ها؟ فیلتر میاد دونه دونه از اون iterable عضو میگیره و پاس میده به اون تابع؛
اما اون تابع باید چه شرایطی داشته باشه؟ اون تابع باید عضوی که از فیلتر دریافت میکنه رو بگیره و یک شرط رو برسی کنه و یک مقدار bool برگردونه! مثلا:
def is_too_long(elm) -> bool:
return len(elm) > 100

به اون تابعی که شما به عنوان آرگومان اول به filter پاس می‌دید اصطلاحا میگن predicate.
خب هدف این‌کار چیه؟ filter بر اساس مقدار bool عی که میگیره تصمیم میگیره که آیا اون عضو تایید میشه یا نه؟ چجور تایید میشه؟ وقتی که مقدار return شده به ازای اون عضو True باشه.
آبجکت filter یک iterable عه lazy هست، یعنی اینکه وقتی صداش می‌زنید فوری نتایج رو برنمی‌گردونه و رفتارش دقیقا مثل رفتار آبجکت range هست، برای مثال وقتی می‌نویسید
>>> range(10_000_000)

این ۱۰ میلیون عدد درست نمیشه و فقط یک آبجکت range درست میشه که هر بار که شما روش next میزنید آیتم بعدی رو بهتون میده

پس وقتی برای مثال می‌نویسید:
>>> even_filter = filter(lambda x: x % 2 == 0, range(1, 10))

یک آبجکت filter دریافت می‌کنید که هربار روش next میزنید اون عضوی که در اون تابع predicate نتیجه‌ش True شده رو برمیگردونه

>>> next(even_filter)
2
>>> next(even_filter)
4
>>> next(even_filter)
6
>>> next(even_filter)
8
>>> next(even_filter)
StopIteration

نکته‌ای که میمونه اینه که، پس اون None که گفتیم میشه به عنوان اولین آرگومان پاس داد، چیه؟ اگر شما اولین آرگومان رو None پاس بدی، حکم این رو داره که گفته باشید تمام اعضایی رو از اون iterable بگیر که مقدار truth value اونها True باشه! مثلا:

x = list(filter(None, ["", [], "Iliya", False, 0, 1]))

خروجی کد بالا با توجه به توضیحات:
["Iliya", 1]

پس در نهایت ساختاری که filter میگیره به شکل زیر هست:
filter(function or None, iterable) --> filter object

لازم به ذکر هست که در ماژول itertools یک تایپی وجود داره به اسم filterfalse که کاملا رفتار برعکسی نسبت به filter داره. 😁

#BuiltIn
🖋@Pygrammer
〰️〰️〰️〰️〰️〰️
©️@raspberry_python
🌷🌷کتاب عالی و جدید رمزنگاری 2022 با موضوع الگوریتم های رمرنگاری


Next-generation cryptography algorithms explained: get to grips with new-age cryptography algorithms, protocols, and their implementation /

@raspberry_python
Massimo_Bertaccini_Next_generation_cryptography_algorithms_explained.pdf
10.5 MB
🌷🌷کتاب عالی و جدید رمزنگاری 2022 با موضوع الگوریتم های رمرنگاری


Next-generation cryptography algorithms explained: get to grips with new-age cryptography algorithms, protocols, and their implementation /

@raspberry_python
کتاب جدید و عالی برای آموزش پایتون 2022 🐍🐍🐍

The Python Book

@raspberry_python
Rob_Mastrodomenico_The_Python_Book_John_Wiley_&_Sons_2022.pdf
3.8 MB
کتاب جدید و عالی برای آموزش پایتون 2022 🐍🐍🐍

The Python Book

@raspberry_python
4_5949490626583071500.pdf
6.1 MB
کتابی دیگر جهت آموزش‌ پایتون

python crash course

با تشکر از مهندس @MATiue

@raspberry_python
✔️ کلاس map

کلاس map یکی دیگه از تایپ‌های built-in پایتون است.
این تایپ برای اولین پارامتر یک Callable دریافت میکنه (مثلا یک تابع یا یک کلاس که داندر __call__ رو پیاده‌سازی میکنه) و پارامتر بعدیش تعداد متغیری iterable هست که بعد از callable بهش پاس می‌دیم. signatureعه تابع مپ به این شکل هست:

map(callable, *iterables) —> map object

اما map چه کاری انجام میده؟ 🤔
اول از همه تایپ‌ مپ درست مانند range و فیلتر lazy iterator هست، یعنی فوری نتایج رو محاسبه نمیکنه،
کاری که map میکنه اینه که میاد دونه دونه از اون iterable (یا iterableهایی) که بهش داده شده، به اون callable پاس میده و نتیجه ای که اون callable بهش داده (در واقع مقداری که از callable ما return شده) رو هر بار که ما next می‌زنیم به ما برمی‌گردونه!

چند مثال کاربردی 🧪

تبدیل همه اعداد یک لیست به مربع خودشان:

lst = [2, 4, 6, 8]
print(list(map(lambda x: x ** 2, lst)))

Output: [4, 16, 36, 64]

تبدیل تمام استرینگ‌های یک لیست به شکل Uppercase خودشان:

lst = ["John", "David", "Mike"]
print(list(map(str.upper, lst)))

Output: ['JOHN', 'DAVID', 'MIKE']

نکته مهم ❗️

اگر به map چند تا iterable میدید، باید حواستون باشه که اون callable باید به تعداد iterableها پارامتر داشته باشه! مثال:


x = list(map(lambda x, y: x + y, [1, 2, 3], [4, 5, 6]))
print(x)

Output: [5, 7, 9]

در مثال بالا دو تا iterable به مپ پاس دادیم پس باید تابعی که به map می‌دیم دوتا آرگومان بگیره. حالا map میاد پارامتر اول (یعنی x) رو از اولین iterable و دومی رو (یعنی y) از دومین iterable میگیره! نکته قابل توجه دیگه اینکه، این فرایند توی تابع (یعنی جمع x و y) به تعداد اعضای کوتاه ترین iterable انجام میشه! یعنی اگر یکی از iterable ها 2 عضو داشت و بقیه 5 عضو، فقط روی 2 عضو اول هر iterable مپ کار انجام میده! مثال:

x = list(map(lambda x, y: x + y, [2, 3], [4, 5, 6, 4]))
print(x)

Output: [6, 8]

🖋 @Pygrammer

〰️〰️〰️〰️〰️〰️
©️@raspberry_python
Power :)

#m4hdi

©@raspberry_python
✔️ توسعه‌دهندگان حرفه‌ای نرم‌افزار‌ چه اولویت‌بندی دارند؟

(اولویت از زیاد به کم)
----- آیا کد کار میکنه؟
---- آیا تست‌های automate شده دارید؟
--- آیا برای کد user doc نوشته شده؟
-- آیا راحت نصب میشه؟
- آیا به اندازه کافی سریع هست؟

اما بالاخره افراد و پست‌هایی در تلگرام و اینستاگرام هستن که یکی را آنچنان برایمان بزرگ می‌کنند که انگار بعضی‌وقت‌ها باقی وجود خارجی ندارند :))

#liewpl
〰️〰️〰️〰️〰️
©@raspberry_python
Forwarded from Persian python
images.rar
1.1 MB
اینم عکس هایی که داخل پروژه استفاده کرده بودیم
What our BDFL said :)

https://github.com/python/cpython/issues

#m4hdi
〰️〰️〰️〰️〰️
©@raspberry_python
🌐 termtosvg

termtosvg is a Unix terminal recorder written in Python

https://github.com/nbedos/termtosvg

Examples
Templates

@raspberry_python
🔴 گروه پایتون

@python_qa

🔴 گروه رزبری پای

@raspberry_micro

🔴 گروه رمزنگاری

@pycrypto

🔴 گروه بات تلگرام
@pyapi

🔴 گروه زبان سی،میکروکنترلر، fpga

@micro_fpga

🔴 گروه خرید و فروش قطعات الکترونیکی

@ElectronicsFreemarket

🔴 کانال زبان سی و میکروکنترلر

@c_micro

🔴 کانال میکروپایتون و اینترنت اشیا

@micropython_iot

🔴 کانال پردازش سیگنال و هوش مصنوعی

@ai_dsp

🔴 کانال آموزش پایتون و رزبری پای

@raspberry_python

🟢 کانال ریاضیات
@new_mathematical

🔴 مباحث متفرقه گروه های تخصصی

@BlindSpots

کانال درخواست پروژه
@project_req

🟢گروه نرم افزار متلب

@Matlab_MathWorks
Constant folding:

فرض کنید قرار هست تا یک فانکشن بنویسیم تا به ما تعداد ثانیه های موجود در یکسال رو بده. به سه شکل میتونیم بنویسیم:
def fn1():
days = 365
hours = 24
minutes = 60
seconds = 60
return days * hours * minutes * seconds

def fn2():
return 365 * 24 * 60 * 60

def fn3():
return 31536000

اینا چه فرق هایی باهم دارن ؟
از نظر خوانایی :‌
تو فانکشن fn1 کاملا مشخص هست که اون عدد ها چین از کجا اومدن ، خروجی چی هست... تو fn2 میشه یه حدس هایی زد که خروجی ما حاصل ضرب چه عدد هایی بوده توی فانکشن سوم هیچ نظری نمیشه داد که اون عدد چیه.

از نظر performance چی؟
اگه با واژه ی constant folding آشنا نبوده باشید احتمالا حدس میزنید که به همون میزان که از خوانایی داره کم میشه،‌ به سرعت داره اضافه میشه. ولی توی runtime اینطور نیست:

پایتون زمانی که داره کد شمارو compile میکنه یه سری optimization های ریز انجام میده مثلا وقتی به عبارت :
365 * 24 * 60 * 60
میرسه میدونه که این ۴ تا مقادیر ثابت هستن نمیشه که تغییر پیدا کنن پس میگه دلیلی نداره من هربار که fn2 رو کسی کال کرد بیام این ۴ تا عدد رو تو هم ضرب کنم و حاصل رو برگردونم. من میام یه بار حاصلش رو حساب میکنم و به جای اون عبارت قرارش میدم.

پس زمانی که کد شما compile شد دیگه "حاصل" اون عبارت که 31536000 باشه برمیگرده موقع کال کردن و دقیقا انگار که fn3 رو کال کرده باشید.

توی اولی ولی اینطور نیست. هربار که شما فانکشن fn1 رو کال کنید پایتون اول میاد ۳۶۵ رو میگیره ذخیره میکنه تو days بعد ۲۴ رو میگیره ذخیره میکنه تو hours همینطور تا انتها... خط آخر هم میاد days و hours و minutes و seconds رو از local variable ها میگیره و تو هم ضرب میکنه و حاصل رو برمیگردونه.

و در آخر فقط زمانی باید performance براتون مهم باشه که کدتون رو profile کردین و دیدین سرعت پایین فلان بخش از کد داره تاثیر جدی میذاره و بودن یا نبودن فلان عنصر تفاوت قابل توجهی داره ایجاد میکنه. شاید مثال خیلی خوبی نبود صرفا هدف گفتن constant folding بود چون با کامنت گذاری و docstring خوانایی کد رو به راحتی میتونید بالا ببرید. (در ضمن comment ها توی پروسه compile کاملا ignore میشن.) اگه خواستید docstring ها رو هم موقع compile نادیده بگیره پایتون:
python -OO your_file.py

#AmirSoroush
@raspberry_python