🐍 Python & Raspberry 🐍
8.08K 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
✔️ What is if __name__ == "__main__":?
اول از همه، همه چیز توی پایتون یه آبجکته، زیاد شنیدیم و کلیشه شده ولی جداً یه سری آبجکتا رو نمی‌شناسیم.

یکی از اون تایپ‌ها ModuleType هست.

هر فایلی که سورس کد پایتون توش باشه، رو بهش میگیم ماژول؛ چرا؟ چون پایتون اون رو میگیره، یه آبجکت براش توی مموری درست میکنه.

چرا؟ خب یکی از دلایل منطقی‌ش اینه که هر ماژول یه namespace باید داشته باشه (هر چند راحت‌تره بگیم هر ماژول یه namespace عه)
خب namespace‌ها توی پایتون چی هستن؟ خیلی ساده‌ست :) همه‌شون دیکشنری‌اند (البته داندر slots قضیه‌اش فرق میکنه)

هر ماژول هم یکی از پایه‌ای‌ ترین نیاز هاش اینه که namespace داشته باشه تا کلاس‌ها و توابع و متغیر‌ها رو در دسترس ما قرار بده.

پس تا اینجا هر ماژول تبدیل به یه آبجکت میشه و یه namespace محسوب میشه. (اگه نمیشد که منتغی میشد 😂)

import types

print(type(types)) -> <class 'module'>
print(isinstance(types, types.ModuleType)) -> True

میدونی سیستم ایمپورت کردن توی پایتون چجوری کار میکنه؟

اول دنبال فایل میگرده
بعدش لودش میکنه (آبجکتش رو درست میکنه)
بعد کاملا رانش میکنه تا چیزای داخلش رو توی مموری بسازه (همون دیکشنری یا namespaceاش رو populate کنه.)

حالا چون رانش میکنه، ممکنه مثلا پرینتی، صدا زدن تابعی، یک عمل زمان‌بری چیزی اون داخل وجود داشته باشه که موقع ایمپورت ما نمیخوایم چنین اتفاقی بیوفته. چون واقعا ران میشه.

باید چه کار کنیم؟

هر ModuleType یه اسمی داره، فایلی اصلی که پایتون اول رو ران میکنه اسمش میشه main، اسم هم توی خود namespace عه ماژول ذخیره میشه توی name

اما دیگر ماژول‌هایی که ایمپورت میشن اسمشون میشه اسم همون فایل‌شون

hola.py
hello.py

# inside hola.py
print(name)

# inside hello.py
import hola

# run hello.py
output: hola

پایتون یه شرط معروفی داره که صورت سوال ماست:
الان میدونیم معنیش چیه
if __name__ == "__main__":

داره میگه اگه ماژولی که ران میکنی اسمش main هست کدای زیرش رو اجرا کن

که الان میدونیم که وقتی ماژول ایمپورت میشه اسمش اسم فایلشه و داندر مین نیست و این شرط غلط میشه و کدای زیرش اجرا نمیشن

حالا میگیم اجرا نمیشن، اما کامپایل که میشن، پس اگه توی بلوک کد این if تو SyntaxError داشته باشی ارورش رو موقع ایمپورت کردنش می‌بینی.

ایمپورت کردن چیزی نیست که «ما» بخوایم روی بهینه‌کردنش وقت بذاریم چون جدا نمیتونیم، اما اگه خود پایتون بهینه‌اش کنه تاثیری خوبی رو می‌بینیم. البته نه توی چیزای کوچیک، یه اپلیکیشنی که خیلی ایمپورت زیادی داره توش مشخص میشه و حتی بهتر اگه یه اپلیکیشنی به بزرگی اینستاگرام اون جاست که این بهینه‌سازی میتونه ساعت‌‌ها کار رو سریع‌تر کنه، چجوری؟
یه سیستمی دارن توی پایتون ۳.۱۲ روش کار میکنن به اسم Lazy Imports، چطوری کار میکنه؟ وقتی ایمپورت‌‌ها تنبل بشن، دیگه همون اول اول همه‌شون evaluate نمیشن، کداشون execute نمیشه و ... و وقتی که نیاز شد، اون ماژول کداش execute میشه. خب چقدر تاثیر میذاره؟‌
همه میدونیم که اینستاگرام از پایتون و جنگو استفاده میکنه، شرکت متا (فیس‌بوک) یه پیاده‌سازی پایتون داره به اسم Cinder این برای اینستاگرام بهینه شده مثلا garbage collector اش خاموشه و جدیدا مقاله‌ای منتشر کردن که گفتن ما ایمپورت‌هارو کاملا lazy کردیم.

قبلنا که تنبل نبودن اگه توسعه‌دهنده‌ای حتی یه فایل رو عوض میکرد، اون سروری که اون فایل رو ران میکرد باید reload ‌میشد و طبق گفته خودشون تا چند دقیقه طول میکشیده این قضیه. اما الان که ایمپورت‌ها تنبل شدن بسیار بسیار سرعت کارشون زیاد شده چون دیگه وقت سر ایمپورت کردن و .... اول کار تلف نمیشه.
پایتون به اندازه‌ کافی سریعه، اما optimization باعث میشه که سریع‌تر بشه به این چیزا میگن بهینه‌سازی

#M4hdi
〰️〰️〰️〰️〰️〰️〰️〰️〰️
©@raspberry_python
👍15
✔️ سوال‌ها:

چرا CPython رو با assembly نمینویسن؟

چرا CPython رو مثل PyPy نمیکنن؟ یا چرا از PyPy بجای CPython استفاده نمیکنیم؟

پاسخ سوال اول:
سوال اول: کد سی سریع‌تره یا کد اسمبلی؟

همه به من بگید ببینم، کامپایلرهای زبان سی از سورس‌کد C، چی تولید میکنن؟ خب حالت خییییلی پایه‌ اینه‌که از سورس C، کد اسمبلی تولید میکنن بعد با یه اسمبلر کد ماشین‌شون رو تحویل میدن.

اما حالت، هیچ‌وقت حالت پایه نیست 😁
کاری که یه کامپایلر سی انجام میده اینه که یه خروجی خیلی efficient و کد اسمبلی خیلی سریع‌ از اون سورس‌کد بیرون میکشه

این اصل ماجراست.
اینه که جواب سوال میشه کد سی در اکثر مواقع از کد اسمبلی hand written که دقیقا همون کار رو انجام میده سریع‌تره. این همه مغز و وقت صرف نوشتن کامپایلر کردن تا این بشه
تا این شده

این از این

سوال دوم: نوشتن کد سی آسون‌تره یا کد اسمبلی؟

سوال سوم: برای نوشتن یه برنامه خیلی ساده، کی سریع‌تر مینویسه یه C کار یا یه Assembly کار؟

سوال چهارم که جوابش هم میدونیم، کد کی سریع‌تره؟

تماما C برنده‌‌ی ماجراست
پس فکر اینکه CPython رو با اسمبلی بنویسن سریع‌تر میشه رو بندازید بیرون.

به چند دلیل: سری دلایل اول -> همین دلایل بالا
سری دلایل دوم: بابا پایتون توی یه سری کارا کنده به هزار تا دلیل دیگه 😕 گیر ندید به سی یا اسمبلی

الان سورس PyPy که سرعت خیلی بیشتری از CPython توی خیلی جاها داره ببینید، پایتونه به ولله تقریبا بالای ۹۸ ۹۹ درصد پایتونه
پس مشکل جای دیگه‌ست.

پاسخ سوال دوم:

پیاده‌سازی CPython یک پیاده‌سازی general هست.
این خیلی معنی‌ها داره
مثال: ببینید یه چیزی وجود داره به اسم numba
(برای مطالعه در مورد نامبا این مقاله‌ام‌ رو بخونید)
این یه JIT Compiler هست برای کارای عددی و محاسباتی دارای حلقه‌های زیاد

یکی از کارای jit ها همینه، چنین کدهایی رو سریع کنن اما آیا همه چنین کدهایی دارن؟ خیر
آیا تحمل اورهد و سنگینی JIT رو دارن؟ قطعا خیر
میدونید چقدر رم مصرف میکنن؟
برای یه راه‌حل مشابه بین پایتون و NodeJS، اون نسخه‌ی NodeJS حدود ۴.۵ برابر بیشتر از پایتون رم مصرف کرده، صرفا بخاطر داشتن JIT.
جیت‌ها start up رو هم کندتر میکنن

از اون طرف پایتون بعضی جاها از pypy سریع‌تره
مثلا یکی‌ش وب
آقای Anthony shaw یه چند تا بنچ‌مارک گرفتن با FastAPI و Uviloop و این دم و دستگاه‌ها
توی همه‌شون pypy بسیار از CPython کند‌تر بوده و رم مصرفی خیلی بیشتری داشته

یه مشکل دیگه هم هست
پای‌پای به طور صد درصد با C extension moduleها اوکی نیست
فرض کن نتونی numpy استفاده کنی 🙂

پس هر چیزی رو بهرکاری ساختن

#M4hdi

©@raspberry_python
👍8
نظرسنجی!

Python Software Foundation و
Packaging Working Group و
Python Packaging Authority

یک نظرسنجی رو ترتیب دادن و از جامعه پایتون خواستن که نظرشون رو راجع به package کردن نرم‌افزارهای پایتونی ارائه کنن

اگه میخواید این مسئله بهتر و ساده‌تر بشه این نظرسنجی رو پر کنید (با فیلترشکن باید برید)

https://www.surveymonkey.co.uk/r/NMG6NJM

#M4hdi

©@raspberry_python
👍5
هر دم از این باغ بری می‌رسد 😍🤟

یک #رشتو از آقای آنتونی شاو (twitter) @anthonypjshaw در مورد یکی از ایده‌‌های سرعت بخشیدن به پایتون 3.12

ایشون کمی در مورد تغییر نحوه‌ی ذخیره‌ی instructions از stack به cpu registers صحبت میکنن =)

https://telegra.ph/a-Twitter-thread-from-anthonypjshaw-11-03

#M4hdi
@raspberry_python
👍5
The @StackOverflow developer survey results came out. 📊

https://survey.stackoverflow.co/2022/

I found some reasons why someone would want to learn or work using @FastAPI in the next months/year. 😅🤓👇

🔗 Sebastián Ramírez (@tiangolo)

چرا FastAPI یاد بگیریم 😁

#M4hdi
#survey
@raspberry_python

دنبال کردن هشتگ m4hdi
دنبال کردن هشتگ survey
👍5
وبالاخره، f string ها در پایتون پدر مادر دار شدن، و یک Syntactic formalization of f-strings براشون در PEP عه شماره 701 نوشته شد و *اگر* تایید بشه در پایتون 3.12 شاهد آن خواهیم بود.

"در کل" و "به صورت خیلی خلاصه" این PEP در این تصویر خلاصه میشه.

🔗 Pablo Galindo Salgado (@pyblogsal)
Finally, "PEP 701 - Syntactic formalization of f-strings" is ready 🚀🔥

We think this will make f-strings even more awesome but it will also help a lot with the maintenance of CPython 🤘

Thanks to my awesome co-authors @isidentical and @isidentical ♥️

https://peps.python.org/pep-0701/

#m4hdi
#PEP
#py312
#improvement


دنبال کردن هشتگ m4hdi
دنبال کردن هشتگ pep
دنبال کردن هشتگ py312
دنبال کردن هشتگ improvement

@raspberry_python
👍6
🐍 Python & Raspberry 🐍
Piccolo is a fast, user friendly ORM and query builder which supports asyncio.
✔️ شاید با شنیدن کلمه‌ی ORM همه‌‌مون یاد SQLAlchamy یا Django ORM بیوفتیم، باشه اینا خیلی خوبن ولی لایبرری‌های جدیدی که نوشته میشن دارن از تمام language feature‌های نایس عه پایتون ۳ خصوصا 3.6 به بعد (Type Hints, F strings and async/await)
با قدرت استفاده میکنن و زیبایی خلق میکنن.

پیکولو، یکی از همین کتابخونه‌هاست.
نویسنده‌ی پیکولو چون از اوایل روزهای کاریش غرق در دنیای async بوده این ORM رو به صورت async first مینویسه :))
ولی میشه ازش به صورت sync هم استفاده کرد.

✔️ از دیگر ویژگی‌هاش
• A builtin playground, which makes learning a breeze.

• Tab completion support - works great with iPython and VSCode.

• Batteries included - a User model, authentication, migrations, an admin GUI, and more.

• Modern Python - fully type annotated.

• Make your codebase modular and scalable with Piccolo apps (similar to Django apps) 👌


میتونید ازش به عنوان یه کوئری بیلدر استفاده کنید:
# Select:
await Band.select(
Band.name
).where(
Band.popularity > 100
)

یا مثل یه ORM عادی باهاش رفتار کنید:
# To fetch an object from the database, and update it:

b = await Band.objects().get(Band.name == 'Pythonistas')
b.popularity = 10000
await b.save()


✔️ این ORM بهترین عملکرد رو با postgresql داره ولی از sqlite هم پشتیبانی میکنه و همچنین قسمت زیبای ماجرا اینه که از:
Starlette, FastAPI, BlackSheep, Xpresso and Starlite are currently supported.
هم برای ساختن web app های نایس پشتیبانی میکنه :))

🐙 https://github.com/piccolo-orm/piccolo

#m4hdi
#ORM
#library
#async

©raspberry_python

دنبال کردن هشتگ m4hdi
دنبال کردن هشتگ orm
دنبال کردن هشتگ library
دنبال کردن هشتگ async
🔥7👍3
آزاد از تحریم‌های آنلاین
با سرویس رفع تحریم 403


سرویس‌های زیادی برای ما توسعه‌دهنده‌ها تحریم هستن، مثل:
• Android Developers
• Visual Studio Installer
• Team Speak
• Google Developers
• Google Cloud
• Firebase
• CloudEra
• CoursEra
• Simple Note
• Chat GPT
• Spotify
• Google Lens
• Adobe
• Docker
• Nvidia experience
• GitLab
• Data Camp
• MongoDB
• Unity
• Trello
• Slack
• Apple Developers
• Unsplash
• AWS Amazon
• Gradle
• Android Studio
• Kaggle
• Math Works
• Jetbrains
و....
صرفا اونایی که توی کار ما بودن رو اسم آوردم
که خب یه راه برای دور زدن این تحاریم (جمع مکسرِ خودساخته‌یِ تحریم 😂) استفاده از فیلترشکن هست که این روزا می‌بینید به چه روزی افتادیم...

اما خب یه سرویس جدیدی به اسم 403 معرفی شده که میخواد چنین تحاریمی رو حل و فصل کنه 😃

403 چیست؟

۴۰۳ پلتفرمی برای برنامه‌نویسان و توسعه‌دهندگان عزیز کشورمان هست که امروزه با انواع تحریم و اختلال در توسعه پروژه‌های مورد نظرشان مواجهه هستند. این پروژه با پشتیبانی از پروتکل‌های مختلف به کاربران این امکان این را می‌دهد که حذف مشکلات موجود به کتابخانه‌ها و وبسایت‌هایی که برای توسعه نیاز دارد دسترسی داشته باشند. این سایت به مرور زمان توسط خود بازخورد کاربران تکمیل می‌شود تا تمام مشکلات این جامعه گرانقدر را رفع کند.

https://403.online/
https://403.online/how-to-use

استفاده کنید و لذت ببرید :)))

#m4hdi
#sanctions
#service



دنبال کردن هشتگ m4hdi
دنبال کردن هشتگ sanctions
دنبال کردن هشتگ service
👎51👍13
شرکت آناکوندا وبسایت
https://pyscript.com/
رو لانچ کرد 😁🎉

یک SaaS رایگان برای استفاده از pyscript تا بتونید اپلیکیشن‌های پایتونی رو توی مرورگر براحتی اجرا کنید 😁

#m4hdi
👍13👎3
✔️ بررسی موشکافانه‌ی منطقه‌ی کد‌های C زبان پایتون، اینبار متد append از تایپ list

این مقاله چگونگی انجام عمل ساده‌ی append در لیست‌ها رو با بررسی کد‌های مفسر CPython بهتون نشون میده و همچنین بررسی میکنه که این عمل از چه الگوریتمی به چه الگوریتمی رفته و چه اتفاقاتی افتاده 😁

📄 https://virgool.io/@liewpl/how-append-works-gp4apwtpr0bt

#m4hdi
#cpython

✒️ @pyeafp

©@raspberry_python
🔥11👍2👏2