🐍 Python & Raspberry 🐍
8.2K 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
🐍 Python & Raspberry 🐍
Difference between yield and return in Python https://www.pythonforbeginners.com/basics/difference-between-yield-and-return-in-python @raspberry_python
سوالی ک پیش میاد در چ مواقعی دوست داریم ک از این قابلیت استفاده کنیم تو برنامه هامون؟

برای جواب دادن ب این سوال اول باید به یک تفاوت اساسی بین yield و return اشاره کنم
و تفاوتش تو اینه که وقتی از return استفاده میکنیم همه دیتاها داخل رم لود میشن و همشون باهم برگشت داده میشن و خب مشکلی که این کار داره اینه ک ممکنه حجم این دیتاها خیلی زیاد باشه و ما اصلا لازم نداریم همه اون دیتارو کنار هم داشته باشیم

مثلا شاید ی تیکه رو داشته باشیم میتونیم پردازش مربوط به اون تیکه از دیتارو ب صورت مستقل انجام بدیم و بعد بریم سراغ قسمت بعدی

خب اگه
yield
رو بلد نباشیم برای حل این مشکل حتما از استفاده از تابع صرف نظر میکنیم

ولی خب با استفاده از yield همزمان میتونیم هم از تابع استفاده کنیم و هم این مشکل حافظه رو برطرف کنیم

@raspberry_python
هیچوقت نباید اسم ماژولی که داریم داخلش کد میزنیم رو اسم یکی از ماژول/پکیج های خود پایتون یا ماژول/پکیج هایی که نصب کردیمشون تا استفاده کنیم قرار بدیم... بریم بیشتر راجع بهش حرف بزنیم...

مثال: من قرار هست با تاریخ کمی کار کنم و خب ماژول datetime رو که پایتون توی استاندارد لایبرری گذاشته رو import میکنم. ولی اسم فایل یا ماژولی که دارم کد میزنم داخلش رو میذارم datetime.py !
# datetime.py
import datetime
t = datetime.date(2020, 10, 10)
print(t)
اروری دریافت میکنم :
AttributeError: partially initialized module 'datetime' has no attribute 'date' (most likely due to a circular import)

این ارور تا حدی خوبه یه چیزایی داره بهمون راجع partially initialized شدن و همچنین circular import میگه...

سناریوی بد موقعی هست که اسم فایلی که دارم توش کد میزنم datetime نیست ولی کنار فایلم توی "همون پوشه" یه فایل به اسم datetime.py به اشتباه درست کردم و خالی هست... حالا چی :
# main.py
import datetime
t = datetime.date(2020, 10, 10)
print(t)
متن ارور :
AttributeError: module 'datetime' has no attribute 'date'

این جا دیگه نه تنها کمک نمیکنه بلکه باعث میشه اول فکر کنیم که خب آها حتما این ماژول قبلا attribute عه date رو داشته الان حذف کردن برم ببینم معادلش چیه! یا اگه مثلا datetime ماژولی بوده باشه که نصب کرده بودیم، حتما ما ورژن دیگه ای ازشو نصب کردیم... ما که عین کدی که مثلا توی ویدیو آموزشی هست رو داریم میزنیم چرا میگه date رو نداره ؟؟

ماجرا از این قرار هست که وقتی دارید یه ماژولی رو import میکنید ، پایتون یه مسیر های مشخصی رو برای پیدا کردن اون ماژول طی میکنه که میتونید با پرینت کردن sys.path ببینید :
import sys
for path in sys.path:
print(path)

توی ویندوز حدودا(ممکنه بسته به نسخه پایتون و platform ترتیبش فرق کنه یا کم و زیاد باشه ما کاری به این قضیه نداریم) به این شکل هست: (اون فولدر test فولدری هست که ماژولی که داره ران میشه داخلش هست)
C:\Users\usr\Desktop\test
C:\Users\usr\...\Python39\python39.zip
C:\Users\usr\...\Python39\DLLs
C:\Users\usr\...\Python39\lib
C:\Users\usr\...\Python39
C:\Users\usr\...\Python39\lib\site-packages

پایتون این مسیر هارو "به ترتیب" از بالا تا پایین چک میکنه تا ماژولی که اسمشو جلوی import statement زدیم رو پیدا کنه و "به محض" اینکه بهش برسه همون رو برای ما import میکنه.

به مسیر ها نگاه کنید: اولین مسیر همیشه مسیری هست که script شما داخلش هست. (اگه PYTHONPATH رو set کرده باشید به عنوان مسیر دوم بعد از current directory اضافه میشه به sys.path. ) یه مسیر دیگه اون folder عه site-packages هست که میبینید. این دقیقا همونجایی هست که پکیج هایی که نصب میکنید داخلش میرن. باقی مسیر ها هم برای ماژول های دیگه ی پایتون هستند.

حالا میتونیم دلیلشو متوجه بشیم چرا پایتون توی هر دو مثالی که اول پست زدیم اول پکیج مارو پیدا کرد... site-package و فولدر های دیگه ای که ماژول های خود پایتون داخلش هستن "بعد" از اولین مسیری که داخل لیست دیدیم سرچ میشن پس در نتیجه اینجا datetime داره اشاره میکنه به همین ماژولی که داریم توش کد میزنیم(مثال اول) یا اون ماژول datetime ای که کنار فایمون ساختیم (مثال دوم)... اونو پایتون پیدا میکنه و میاره و خب طبیعتا ما چیزی به عنوان "date" تعریف نکرده بودیم !!

اگه کمی کلی تر بخوایم بگیم در واقع "هرجا" از این مسیرها یه فایل datetime.py قرار بدیم که نسبت به اونی که پایتون توی استاندارد لایبرری قرار داده جلوتر باشه این مشکل رو داریم...

سوال: همه ی ماژول ها به همین صورت هستن ؟ نه ! اون هایی که داخل مفسر compile شدن شامل موارد بالا نمیشن یعنی اگه اسم فایلتون رو این اسامی بذارین باعث نمیشه پایتون اونارو پیدا کنه اول. اینجوری ببینینشون :
import sys
for i in sys.builtin_module_names:
print(i)
فرض کنید مثلا gc.py شما زود تر پیدا میشد...
gc —> garbage collection

@raspberry_python
🐍 Python & Raspberry 🐍
خروجی کد بالا چیست؟
این ک علامت تعجب اخر رو نوشتنی شیفت نگرفتم شمارو یاد چی میندازه؟ :)))))
generate_daaset.zip
4.2 MB
با استفاده از این کدها میتونید دیتاهای جدید برای ocr با فونتهای موردنظر خودتون تولید کنید

نوشته شده توسط:
@Ali_b_771




@raspberry_python
🟥🟨🟩🟧🟦🟥🟨🟪🟧🟩🟦

گروه 5500 نفره پایتون

👇👇👇👇👇👇👇👇👇


💥💥💥💥💥💥💥

@python_QA

💥💥💥💥💥💥💥
پرچم کدوم بالاس؟ 😍😅
Final Results
51%
Windows
49%
Linux
گروه 700 نفره رمزنگاری
👇👇👇😍

https://t.me/pycrypto
4_5948275722068951695.pdf
2 MB
آشنایی عملی با برنامه‌نویسی پایتون»، به قلم «برایان هینولد» (Brain Heinold)

@raspberry_python
افزایش سرعت تایپ
Telegram Bot Using Python In 10 mins 😍

@raspberry_python