🐍 Python & Raspberry 🐍
8.09K 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
هیچوقت نباید اسم ماژولی که داریم داخلش کد میزنیم رو اسم یکی از ماژول/پکیج های خود پایتون یا ماژول/پکیج هایی که نصب کردیمشون تا استفاده کنیم قرار بدیم... بریم بیشتر راجع بهش حرف بزنیم...

مثال: من قرار هست با تاریخ کمی کار کنم و خب ماژول 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
September 23, 2021
September 23, 2021
🐍 Python & Raspberry 🐍
خروجی کد بالا چیست؟
این ک علامت تعجب اخر رو نوشتنی شیفت نگرفتم شمارو یاد چی میندازه؟ :)))))
September 23, 2021
generate_daaset.zip
4.2 MB
با استفاده از این کدها میتونید دیتاهای جدید برای ocr با فونتهای موردنظر خودتون تولید کنید

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




@raspberry_python
September 24, 2021
🟥🟨🟩🟧🟦🟥🟨🟪🟧🟩🟦

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

👇👇👇👇👇👇👇👇👇


💥💥💥💥💥💥💥

@python_QA

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

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

@raspberry_python
September 26, 2021
September 27, 2021
September 27, 2021
September 27, 2021
September 27, 2021
September 27, 2021