| کانال توسعهدهندگان پایتون |
Ir al canal en Telegram
⭕️ کانال توسعهدهندگان پایتون دولوپیکس 💠 دولوپیکس | جامعه توسعهدهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport
Mostrar más7 110
Suscriptores
+624 horas
+797 días
+18730 días
Archivo de publicaciones
پایتون برای کارهای روزمره سیستمعامل 🧰✨
خیلی وقتها پشت سیستم چند تا کار تکراری داریم: جابهجا کردن فایلها، عوض کردن اسمها، پیدا کردن فایلهای قدیمی و پاک کردن لاگها. این چیزها اگر دستی انجام بشن هم وقت میگیرن، هم احتمال خطا زیاده.
با یک اسکریپت ساده پایتون میشه این کارها رو اتومات کرد. ایدهی کلی اینه: از ماژولهای استاندارد مثل os و pathlib و shutil استفاده میکنیم تا بدون نیاز به هیچ کتابخونه اضافی، فولدرهامون رو مرتب کنیم.
یکی از آموزشهای خوب برای شروع این فاز، بخش "File and Directory Access" توی مستندات رسمی پایتونه:
pathlib – Object-oriented filesystem paths
اینجا یک مثال واقعی: اسکریپتی که یک فولدر رو اسکن میکنه و فایلها رو بر اساس پسوند، توی زیرفولدرهای جدا میریزه (مثلا
images، videos، documents). این دقیقا چیزیه که تو خیلی از اسکریپتهای مدیریت دانلود استفاده میشه.
from pathlib import Path
import shutil
BASE_DIR = Path.home() / "Downloads"
EXT_MAP = {
"images": [".png", ".jpg", ".jpeg", ".gif"],
"videos": [".mp4", ".mkv", ".avi"],
"documents": [".pdf", ".docx", ".xlsx", ".pptx"],
"archives": [".zip", ".rar", ".tar", ".gz"],
}
def get_category(ext: str) -> str | None:
ext = ext.lower()
for category, exts in EXT_MAP.items():
if ext in exts:
return category
return None
for item in BASE_DIR.iterdir():
if not item.is_file():
continue
category = get_category(item.suffix)
if not category:
continue
target_dir = BASE_DIR / category
target_dir.mkdir(exist_ok=True)
target_path = target_dir / item.name
print(f"Moving {item.name} -> {target_path}")
shutil.move(str(item), str(target_path))
چند نکتهی کاربردی:
🔹 استفاده از Pathlib خیلی خواناتر از کار با os.path و رشتههای خامه. کار با مسیرها رو شبیه Objectها میکنه.
🔹 قبل از اجرای اسکریپت روی فولدر اصلی، بهتره روی یک فولدر تست امتحان بشه تا مطمئن باشی چیزی اشتباه جابهجا نمیشه.
🔹 میشه این ایده رو گسترش داد: مثلا فایلهای قدیمیتر از ۳۰ روز رو ببری داخل یک فولدر old یا لاگهای بالای یک حجم مشخص رو پاک کنی. همهش با همین ماژولهای استاندارد قابل انجامه.
مستندات رسمی پایتون برای کار با فایلسیستم خیلی تمیز و قابل اتکا هستن؛ هر وقت خواستی اسکریپت رو حرفهایتر کنی، سر زدن به این صفحهها واقعا کمک میکنه:
shutil – High-level file operations
یک بار این اسکریپت رو روی فولدر Downloads خودت اجرا کن، اگر مفید بود، تو پروژههای دیگهات هم از همین الگو استفاده کن و با بقیه پایتونیستها به اشتراک بذار 🚀
🔖 #Python #پایتون #Python #Automation #pathlib #shutil #Scripting
👤 Developix
💎 Channel: @DevelopixPythonکنفرانس: پایتون و هوش مصنوعی 🤖🐍
🤔 تا حالا برات سوال شده که چطوری با پایتون میشه وارد دنیای هوش مصنوعی شد؟
یا چرا تقریباً همه از پایتون برای AI استفاده میکنن؟
🔥 این فایل دقیقاً برای توئه!
توی این کنفرانس، با زبونی ساده و خودمونی دربارهی مسیر یادگیری 📚،
کاربردهای واقعی 🌍
و آیندهی شغلی 💼 در دنیای هوش مصنوعی صحبت کردیم.
🔖 #Python #پایتون
👤 Charisma
💎 Channel: @DevelopixPython
+2
#سوال
🔶 توضیح تصاویر:
با توجه به بنچمارک تصویر اول (P1) که تقریبا برابر با 6 ثانیه است نتیجه مورد انتظار در تصویر دوم (P2) با در نظر گرفتن اینکه دو تابع با پردازش یکسان فراخوانی شده و به دو thread مجزا ارسال شده، عدد مورد انتظار ~6 ثانیه است ولی این عدد تقریبا دو برابر نتیجه بنچمارک قبلیه که غیرقابل انتظاره. در ادامه تصویر سوم (P3) با قرار دادن تأخیر ۶ ثانیه داخل بلاک task_1 انتظار میره نتیجه برابر با 12 + 6 ثانیه باشه (با توجه به نتایج تصاویر قبلی) ولی این اتفاقا نمیفته.🔶 سوال:
دلیل دو برابر شدن بنچمارک (P2) و عدم اعمال شدن تاخیر ۶ ثانیهی (P3) را توضیح بدید؟🔖 #Python, #پایتون 👤 ȺʍìɾⱮօհąʍʍąժ 💎 Channel: @DevelopixPython
🔢 تبدیل عددهای نوشتهشده با حروف به عدد واقعی در پایتون!
با استفاده از کتابخونهی
numerizer میتونید عددهایی که به صورت متنی نوشته شدن (مثل four hundred and sixty one) رو به عدد واقعی تبدیل کنید 🔥
مثلاً:
from numerizer import numerize
print(numerize('four hundred and sixty one'))
# '461'
print(numerize('four hundred sixty one'))
# '461'
print(numerize('four sixty one'))
# '461'
print(numerize('four sixty-one'))
# '461'
📘 این کتابخونه بهصورت خودکار انواع حالتهای نوشتاری عددها رو تشخیص میده و اونها رو به عدد صحیح تبدیل میکنه.
خیلی کاربردیه وقتی کارتون با پردازش متن (NLP) یا ورود دادههای متنی هست.
کتابخونهی numerizer فقط با عددهای انگلیسی کار میکنه (مثل “four hundred and sixty one”)
ولی برای اعداد فارسی یا متنی فارسی (مثل «چهارصد و شصت و یک») هنوز کتابخونهی مستقیمی مثل numerizer وجود نداره که دقیق و کامل کار کنه.
با این حال، چند تا روش و راهحل کاربردی هست:
🧩 روش ۱: استفاده از کتابخونهی آماده برای فارسی
pip install text2numfa
سپس:
from text2numfa import text2num
print(text2num("چهارصد و شصت و یک")) # 461
print(text2num("دوازده هزار و پانصد و چهل")) # 12540
✅ پشتیبانی از اعداد فارسی
✅ دقیق و ساده
❌ نسبتاً کمتر شناختهشده و ممکنه در بعضی حالتها خطا بده
🧩 روش ۲: استفاده از مدلهای NLP (اگر خواستی هوشمندتر باشه)
مثلاً با مدلهای فارسی HuggingFace میتونی متن رو تجزیه و معنی عدد رو پیدا کنی، ولی این برای پروژههای پیشرفتهتره (مثلاً چتبات یا پردازش زبان طبیعی).
🧩 روش ۳: ساخت تابع ساده خودت
برای پروژههای کوچک، میتونی خودت یک دیکشنری بنویسی:
numbers = {
"یک": 1, "دو": 2, "سه": 3, "چهار": 4, "پنج": 5,
"شش": 6, "هفت": 7, "هشت": 8, "نه": 9, "ده": 10,
"صد": 100, "هزار": 1000
}
def text_to_num_fa(text):
parts = text.split(" و ")
total = 0
for part in parts:
for key, value in numbers.items():
if key in part:
total += value
return total
print(text_to_num_fa("چهارصد و شصت و یک"))
البته این نسخهی ساده است و میشه خیلی حرفهایترش کرد تا عددهای ترکیبی رو درست محاسبه کنه.
🔖 #Python, #پایتون
👤 Charisma
💎 Channel: @DevelopixPythonRepost from ice school
🏳️🌈 🛍🏳️🌈 🛍🏳️🌈🛍خبر ویژه برای علاقه مندان پایتون!
ثبتنام در دوره جامع و کاربردی برنامهنویسی پایتون با ۱۵٪ تخفیف ویژه 🍂
اگر میخواهید از پایه با قدرتمندترین زبان برنامهنویسی دنیا آشنا شوید و مسیر حرفهای خود را شروع کنید، این دوره بهترین انتخاب است.
🗂 در این دوره، از نصب و راهاندازی محیطهای توسعه مانند Visual Studio Code و PyCharm گرفته تا تسلط بر مفاهیم کلیدی پایتون، همه چیز را گام به گام یاد میگیرید:
🔵 متغیرها، انواع داده و عملگرها
🔵 ساختارهای شرطی و حلقهها
🔵 توابع، ماژولها و مدیریت استثناها
🔵 کار با فایلها و توابع کاربردی
🔵 آشنایی با توابع لامبدا و محیطهای مجازی
🔵 برنامهنویسی شیگرا (OOP)
🔵 معرفی فریمورکهای قدرتمند Python مثل FastAPI، Django و Scikit-Learn
✅ این دوره مناسب علاقهمندان به توسعه نرمافزار، دادهکاوی و یادگیری ماشین است که میخواهند دانش کاربردی و بهروز را بیاموزند.
🔹 ۱۵٪ تخفیف ویژه پاییز تا ۱۵ مهر 🔹
🔹 برای ثبتنام با تخفیف دایرکت به
آیدی @ad1_iceschool
👨💻استاد دوره : سهیل عظیمی
📍مدرسه آیس (حضوری و آنلاین)
📞 ۴۱۶۰۶
🌐https://iceschool.ir
🚀 t.me/iceschoolll
📸 instagram.com/iceschool.ir
✉️info@icschool.ir
خروجی تابع hello چیست؟
def make_bold(fn):
return lambda : "<b>" + fn() + "</b>"
def make_italic(fn):
return lambda : "<i>" + fn() + "</i>"
@make_bold
@make_italic
def hello():
return "hello world"
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPythonتبدیل فایل PY به EXE با auto-py-to-exe
در قسمتهای قبل با روشهای تبدیل فایل پایتون به فایل اجرایی ویندوز آشنا شدیم. این بار میخوایم با استفاده از auto-py-to-exe این کار رو انجام بدیم.
🚀 اول از همه، ابزار رو نصب کنید:
pip install auto-py-to-exe
🖥️ بعد با دستور زیر برنامه رو اجرا کنید:
auto-py-to-exe
🎨 بعد از اجرا، براتون بازش میکنه. در قسمت اول هم باید مسیر فایل پایتون خودتون رو مشخص کنید.
📦 گزینه Onefile مشخص میکنه که خروجی یک فایل باشه یا دایرکتوری شامل چند فایل.
🖥️ در قسمت Console میتونید تعیین کنید که هنگام اجرای EXE کنسول باز بشه یا نه.
🔮 میتونید آیکون دلخواه رو هم برای فایل اجرایی انتخاب کنید.
⚙️ در بخشهای بعدی امکان تنظیم فایلها و تنظیمات پیشرفته وجود داره.
🔓 وقتی تنظیمات رو انجام دادید، روی دکمه Convert کلیک کنید تا فرایند ساخت فایل شروع بشه.
📂 بعد از اتمام داخل پوشه Output فایل EXE ساخته میشه.
⚠️ توجه:
ابزار auto-py-to-exe در واقع رابط گرافیکی Pyinstaller هست و برای کارکرد نیاز به نصب Pyinstaller داره.
⏳ در پایین صفحه هم کدی که نوشته شده همون دستور Pyinstaller هست که میتونید اجراش کنید.
🔖 #Python, #پایتون
👤 𝐏𝐫𝐨𝐠𝐫𝐚𝐦𝐦̷𝐞̷𝐫̷
💎 Channel: @DevelopixPythonتبدیل فایل PY به EXE با Pyinstaller
در پستهای قبلی، به تبدیل فایل پایتون به EXE با استفاده از ابزار cx_Freeze پرداختیم. این بار، میخوایم با ابزار Pyinstaller فایلمون رو به اجرایی تبدیل کنیم.
در مرحله اول که کاملا مشخصه، کافیه Pyinstaller رو نصب کنید.
pip install pyinstaller
وارد همون پوشهای که فایل پایتون داخلش قرار داره بشید. سپس دستور زیر رو وارد کنید:
pyinstaller --onefile name.py
به جای name.py، اسم فایل پایتون خودتون رو وارد کنید.
سوییچ --onefile باعث میشه یک فایل نهایی تولید بشه.
پس از اجرای دستور، پوشهای به اسم dist ایجاد میشه که EXE در این پوشه قرار میگیره.
🧸 وقتی برنامهی شما گرافیکی باشه، بعد از تبدیل به EXE یک کنسول هم همراه با برنامه باز میشه. اگه نمیخواید این پنجره نمایش داده بشه، میتونید از سوییچ --noconsole استفاده کنید.
کافیه دستور رو اینطوری وارد کنید:
pyinstaller --onefile --noconsole name.py
🎉 برای مطالعه و امکانات بیشتر Pyinstaller، میتوانید به وبسایت رسمیش مراجعه کنید:
https://pyinstaller.org
🔖 #Python, #پایتون
👤 𝐏𝐫𝐨𝐠𝐫𝐚̷𝐦𝐦̷𝐞̷𝐫̷
💎 Channel: @DevelopixPython🎯 بررسی پلتفرمهای اجرای کد پایتون در موبایل
🔵 Android:
🐍 Pydroid 3
✅ مزایا:
⬅️ ساپورت اکثر کتابخانههای پایتون
⬅️ دارای ترمینال و محیط گرافیکی GUI
⬅️ نسخهی پرمیوم با قابلیت auto complete
⬅️ اجرای کدها بدون نیاز به اینترنت
❌ معایب:
⬅️ نسخهی پایتون ثابت و غیرقابل ارتقا
⬅️ برخی کتابخانههای سنگین در نسخه رایگان کار نمیکنند
⬅️ عملکرد کند ادیتور در پروژههای بزرگ
🐍 Termux
✅ مزایا:
⬅️ محیط شبیهسازی شده لینوکس
⬅️ داشتن shell
⬅️ امکان نصب نسخه دلخواه از پایتون
⬅️ کنترل کامل روی پکیجها و...
⬅️ استفاده از مفسر رسمی پایتون که از طریق بستههای apt نصب میشود
❌ معایب:
⬅️ فاقد محیط گرافیکی بهجز Tkinter که از طریق بستههای پایتون قابل نصب میباشد
⬜️ IOS
🐍 Pyto
✅ مزایا:
⬅️ ساپورت از نسخههای پایتون و رابط کاربری
⬅️ امکان نصب بسیاری از کتابخانهها
❌ معایب:
⬅️ اجرای کند
⬅️ عدم ساپورت از برخی کتابخانهها
🐍 Pythonista
✅ مزایا:
⬅️ پشتیبانی از بسیاری از کتابخانهها
⬅️ مناسب برای ساخت اپلیکیشنهای ساده با رابط کاربری
❌ معایب:
⬅️ نصب کتابخانهها بصورت پیچیده
⬅️ نسخهی پولی
🐍 Google Colab
✅ مزایا:
⬅️ اجرای کد بدون نیاز به نصب نرمافزار از طریق Browser
⬅️ اجرای کدها در سرورهای قوی با مفسر پایتون
⬅️ امکان ذخیره نوتبوکها و اشتراکگذاری آنها
❌ معایب:
⬅️ نیاز به اینترنت
⬅️ اجرای موقتی و...
🔖 #Python, #پایتون, #android, #ios, #pydroid, #pyto
👤 𝐏𝐫𝐨𝐠𝐫𝐚̷𝐦𝐦̷𝐞̷𝐫̷
💎 Channel: @DevelopixPython
تبدیل فایل Py به EXE
بعضی اوقات لازم هست که فایل پایتونیمون رو تبدیل به یک فایل EXE کنیم تا راحت بتونیم اجراش کنیم. برای این کار ابزارهای زیادی هست، ولی یکی از راحتترین و بیدردسرترین روشها استفاده از cx_Freeze هست. حالا بریم ببینیم چطوری میشه ازش استفاده کرد.
خب طبیعی هست که اول باید ابزار رو نصب کنیم. توی ترمینال این دستور رو میزنیم:
pip install cx_Freeze
بعد از نصب، باید یه فایل بسازیم به اسم setup.py که قراره تنظیمات تبدیل پروژه رو توش بنویسیم. اگه برنامهمون سادهست این کد کفایت میکنه:
from cx_Freeze import setup, Executable
setup(
name="اسم برنامه",
version="ورژن برنامه",
description="یک توضیح درباره برنامه",
executables=[Executable("main.py")]
)
ولی اگه برنامهمون از کتابخونههای گرافیکی استفاده میکنه، اون وقت فایل setup.py باید یک ذره فرق داشته باشه:
from cx_Freeze import setup, Executable
import sys
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(
name="اسم برنامه",
version="ورژن",
description="توضیحات",
executables=[Executable("main.py", base=base)]
)
نکته مهم: فایلی که میخواهید تبدیلش کنید باید اسمش main.py باشه. البته میتونید اسم دیگه هم بدید، ولی اون موقع باید توی قسمت Executable اسم دقیق فایل رو بنویسید.
حالا ترمینال رو باز کنید، وارد مسیر اون فایل شید و این دستور رو بزنید:
python setup.py build
یه پوشه به اسم build ساخته میشه که داخلش نسخهی EXE برنامه هست😉
یک روش سادهتر هم هست که دیگه نیاز به فایل setup نداره.
که دستورش این هست:
cxfreeze --script hello.py --target-dir dist
اینجوری مستقیم فایل EXE ساخته میشه و نیاز به فایل setup.py نیست.
البته توی صفحه رسمیش سوییچهای دیگه هم گذاشته شده که میتونید ازشون استفاده کنید:
https://cx-freeze.readthedocs.io/en/stable/script.html
🔖 #Python, #پایتون
👤 𝐏𝐫𝐨𝐠𝐫𝐚𝐦𝐦𝐞𝐫
💎 Channel: @DevelopixPython💠 PEP 758 – Allow except and except* expressions without parentheses
با قبول PEP 758 حالا syntax جدیدی رو برای ساختار try-except در نسخه 3.14 داریم. این موضوع ساختار های مورد قبول فعلی رو تغییر نمیده و فقط ساختاری جدید رو اضافه میکنه.
ابتدا بهتره یک مرور ساده روی ساختار فعلی
except داشته باشیم:
except_block:
| "except" expression ["as" identifier] ":" block
| "except" "*" expression ["as" identifier] ":" block
اگر لازم بود که از چند exception استفاده کنیم اونها رو داخل پرانتز قرار میدادیم و با ساختار زیر از اون استفاده میکردیم:
except_block:
| "except" (expressions) ["as" identifier] ":" block
| "except" "*" (expressions) ["as" identifier] ":" block
یا به طور دقیق تر:
except_block:
| "except" "(" expression ("," expression)+ ")" [ "as" identifier ] ":" block
| "except" "*" "(" expression ("," expression)+ ")" [ "as" identifier ] ":" block
به شکل:
try:
risky_operation()
except (ValueError, TypeError, RndExcept):
handle_error()
این PEP چیز بخصوصی رو به همراه نداره، تنها موردی که به این زبان اضافه میکنه اینه که از حالا در صورتی که از کلمه کلیدی as استفاده نشه میتونیم از پرانتز ها صرفنظر کنیم. پس حالا ساختار های زیر رو در پایتون ممکنه ببینید:
except_block:
| 'except' expressions ':' block
| 'except' '*' expressions ':' block
به طور خلاصه میتونیم بگیم که اگر تا الان کد زیر با SyntaxError برخورد میکرد، حالا در نسخه 3.14 به هیچ مشکلی برخورد نمیکنه و به درستی اجرا میشه:
try:
risky_operation()
except ValueError, TypeError, RndExcept:
handle_error()
اما باید توجه داشت که اگر لازم باشه از as و یک identifier استفاده بشه وجود پرانتز ها همچنان الزامی هستند.
دلیل اضافه شدن این امکان عمدتا مرتبط به خوانایی کد و ساده کردن قسمت هاست. استفاده از پرانتز باتوجه به نبود هیچ چیز اضافه دیگهای غیرضروری بنظر میرسید و باتوجه به سایر قسمت ها که اضافه کردن پرانتز در این شرایط رو اختیاری کردند، این تغییر کمک میکنه تا قسمت except از ساختار کلی error handling در پایتون هم مقداری مشابه سایر قسمت ها بشه. به طور خلاصه میتونیم بگیم که اگر از python2 استفاده میکردید و به این شکل خطاها رو مدیریت میکردید، حالا باز هم مجاز به انجام این کار هستید.
✍️ *ژنرال*
🏷 #Python, #PEP, #except, #try, #pep785
💎 Channel: @DevelopixPython💠 PEP 749: Deferred Evaluation Of Annotations Using Descriptors
بعد از چند سال حالا PEP 649 به لطف ارائه خوب PEP 749 تایید شده و قراره تحولی رو در annotation ها داشته باشیم.
به این کد دقت کنید:
class A:
def method(self) -> B: ...
class B: ...
در حالت عادی چون نوع برگشتی method ما B هست و B هم تا اون لحظه تعریف نشده به NameError برخورد میکنیم. این تا حد زیادی تبدیل به یک معضل شده بود تا اینکه اجازه استفاده از literal string ها به عنوان نوعی ارجاع دهنده داده شد که در __annotations__ هم لحاظ میشن. این موضوع حتی فراتر از این حدود هم پیش رفت و با ارائه PEP 563 و امکان استفاده از annotations در __future__، تمام annotation ها هنگام اجرای کد (runtime) تبدیل به string میشن (بدون استثنا، تمام annotation ها).
خب، این واقعا کثیف کاری بود. IDE ها به درستی میتونستند type ها رو تشخیص بدند و مفسر هم دیگه خطای NameError نمیداد:
from __future__ import annotations
class A:
def method(self) -> B: ...
class B: ...
اما همونطور که گفته شد همه اونها به string تبدیل میشدند و اگر کد زیر خواسته میشد خروجی مطلوب (که خود کلاس B هست) داده نمیشد و در عوض "B" رو میدیدم.
print(A.method.__annotations__)
این یعنی مشکل. چرا؟ چون در صورتی که مقدار local باشه الزاما دیگه به متغیر ها دسترسی نداریم و حتی اگر دسترسی داشته باشیم باید اون رو eval کنیم که کار جالبی نیست.
راهحلی درحال اضافه شدن هست. در نسخه 3.14 باز هم از مفهوم lazy evaluation قراره استفاده دیگهای بشه. علت برخورد شما به NameError در کد اول این هست که مفسر بلافاصله میخواد به annotation دسترسی پیدا کنه، اما حالا این کار رو انجام نمیده و فقط زمانی که باید بهشون دسترسی گرفته بشه این کار رو انجام میده که باعث میشه موقع load کردن code شما حتی اگر annotation وجود خارجی هم نداشت باعث مشکل نشه.
این یک تحول نسبتا بزرگ برای زبان پایتون هست، اللخصوص برای نویسندگان کتابخونه ها. ممکنه دیده باشید که به جای SomeType نوشته شده باشه "SomeType" چرا؟ چون به هر دلیلی نویسنده خواسته از NameError فرار کنه. اما حالا نه، لازم نیست quote قرار داده بشه و مستقیما میشه از خودش استفاده کرد.
چه اتفاقی برای annotations در __future__ میوفته؟ در نسخه 3.15 حذف میشه و احتمالا هشدار منسوخ شدن برای استفاده از اون در نسخه 3.14 اضافه خواهد شد.
این موضوع حتی فراتر از این حرف ها هست و ما حتی یک module کاملا جدید رو قراره در stdlib داشته باشیم. همونطور که گفته شده استفاده از inspect برای دسترسی به annotation ها راه خوبی نیست چون واقعا سنگینه. پس حالا annotationlib رو قراره داشته باشیم که ابزاری کاملا مناسب هست و به راحتی قابل استفادهست.
ما تابهحال نوع خاصی برای annotation ها نداشتیم (نوع کلی) اما حالا داریم:
1. VALUE: همون مقدار پیشفرض که تا الان هم داشتیم
2. FORWARDREF: در صورت نبود مقدار مشخصی برای اسم به کار برده شده
3. STRING: مقدار متنی اونها (کاملا مناسب برای ابزار document کردن)
تنها مورد جدید ForwardRef هست. چه زمانی این نوع دیده میشه؟ زمانی که عملا هیچ چیزی با این name وجود نداشته باشه (قبلا در این شرایط NameError داده میشد) و حالا با این نوع گفته میشه که "این نوع unresolved هست"
این موضوع هیچ تاثیر منفی روی std wrapper هایی مثل classmethod، staticmethod، functools.wraps و موارد دیگه قرار نیست بزاره و همه همگام میشن پس لازم نیست در این مورد نگران باشیم.
به طور خلاصه، تغییر سنگینی در انتظار نویسندگان کتابخونه های بزرگ هست اما بعد از اون نوشتن annotation ها واقعا خیلی راحت تر میشه و پایتون خیلی مهربون تر با این قضیه برخورد میکنه.
✍️ *ژنرال*
💎 Channel: @DevelopixPython#سوال ✨
کار کدام تابع زودتر به پایان میرسد ⁉️
✍️ *ژنرال*
💎 Channel: @DevelopixPython
Repost from Hostiran | هاست ایران
🔥 تخفیف بزرگ سرور اختصاصی ابری هاست ایران از امروز شروع شد!🚀
🛸 ما تو هاست ایران با توجه به درخواستهای پرتکرار شما، یک سرویس متفاوت راه انداختیم:
🌩 سرور اختصاصی ابری – ترکیبی از قدرت سختافزار اختصاصی با انعطاف و مقیاسپذیری فضای ابری ✨
✅ منابع کاملاً اختصاصی
✅ پرداخت ساعتی یا ماهانه، فقط برای میزان مصرف واقعی (PAYG)
✅ پشتیبانی از Nested Virtualization (نصب Hypervisor روی VM)
✅ ساخت سریع ماشینمجازی ویندوز یا لینوکس
✅ بکاپ خودکار و پشتیبانی ۲۴/۷
✅ انتخاب دیتاسنتر نزدیک به کاربران شما
💵 فقط تا ۶ اردیبهشت فرصت دارید این سرویس رو با ۵۰٪ تخفیف ویژه تهیه کنید!💥
🟥 برای اطلاعات بیشتر و سفارش:
🔗 لینک مشاهده سرویس
💠 PEP 750: Template Strings (T-Strings)
مدتی میشه که PEP 750 تایید شده و قراره در نسخه 3.14 پیاده بشه.
برای اولین بار قراره زمانی که از quotation (
") استفاده میکنید مقداری از جنس یک built-in type برای شما برگردونده نشه.
تا الان string prefix های r, f, u و fr رو در پایتون داشتیم و حالا قراره t و tr رو هم در کد ها (مخصوصا در کد framework ها مشاهده کنید).
وجود template string ها در پایتون چیز جدید نیست. string.Template یا formatting در پایتون وجود داشتند و دارند. حتی templating engine هایی مثل jinja یا meko و حتی engine های مختص framework های محبوبی مثل django هم وجود داشتند و میشه گفت این مقوله مفهوم جدیدی به پایتون اضافه نمیکنه.
از زمانی که PEP 498 تایید شد و f-string به پایتون 3.6 اومد مقداری مفهوم template ها در کد ها مقداری کمرنگ شدند چون عمده نیازی که وجود داشت برای جایگذاری مستقیم داده در string ها بود و f-string این نیاز رو برطرف میکرد. از زمان معرفی PEP 701 استفاده از اونها بیشتر هم شد چون استفاده از اون رو به شدت آسونتر میکرد.
اما t-string ها مثل f-string ها عمل نمیکنند. میشه گفت t-string ها تمام قابلیت هایی که f-string ها داشتند رو دارند اما اگر نیاز شما به چیزی مشابه f-string ها هست که یک str برگردونه، واقعا لزومی نداره از t-string ها استفاده کنید چون فقط کار خودتون رو پیچیده کردید. وجود t-string ها ضربهای به ماهیت f-string ها و علت وجودشون نمیزنه چون مفهومی متفاوت رو ارائه میده.
همونطور که اشاره شد شما با استفاده از این syntax دیگه مستقیما یک string ندارید و مقداری از نوع Template برای شما برگردونده میشه. شما وقتی از f-string استفاده میکنید صرفا خروجی در اختیار شما قرار میگیره و عملا هیچ دسترسی مستقیمی به مقادیر داده شده به رشته ندارید، اما t-string ها اینطور نیستند.
میشه گفت که اگر f-string خروجی (بَعد) چیزی که میخواین باشه، t-string یک ساختار نگهدارنده برای شماست (قبل از ایجاد). ضمن اینکه استفاده مستقیم از f-string ها برای انجام کار هایی میتونست مشکلات امنیتی (مثل sql injection) بوجود بیاره اما اینجا با مدیریت بهتر میشه از این مشکلات امنیتی هم در امان بود.
چطور باید یک template ساده نوشت؟
c = "DevelopixPython"
t = t"subscribe @{c}"
خب، قطعا با خودتون گفتید که "این همون f-string نیست؟" که خب جواب به طور واضحی نه هست. اینجا متغیر t دیگه یک string نیست، یک Template هست.
این چه امکاناتی رو به ما میده؟
1. تفکیک قسمت های ثابت در رشته از متغیر های ورودی.
2. دسترسی مستقیم به ورودی ها (interpolations)، نوعتبدیل خواسته شده برای اونها (conversion)، نوع formatting خواسته شده برای اونها (format_spec) و حتی عبارت داده شده جهت جایگذاری!
اما باید دقت داشت که بعد از ایجاد Template، کل ساختار غیرقابل تغییر یا read-only میشه.
در PEP 498 گفته شده "به همون دلیلی که متد bytes.format رو نداریم، یک prefix با عنوان fb هم برای f-string ها نداریم". این قاعده درحال حاضر به طور کامل برای t-string ها هم صدق میکنه و tb هم معنی نداره.
اما خب، همونطور که گفته شده این چیزی نیست که ازش چشمپوشی شده باشه و این برمیگرده به پیشنهادی که Steve Dower داد که مورد قبول واقع شد پس انتظار میره در آینده ترکیبی از bytes ها رو هم با این template ها شاهد باشیم.
حالا سوالی پیش میاد. اینکه چه زمانی از f-string استفاده کنیم و چه زمانی از t-string؟
وقتی داریم در مورد f-string ها حرف میزنیم یعنی در خروجی انتظار یک str داریم که render شده. اما زمانی که در مورد template ها حرف میزنیم انتظار خروجی str نداریم.
ما برای استفاده از template ها نیاز به یک processor داریم. به طور خیلی ساده میشه گفت t-string ها به منظور ایجاد string ها استفاده نمیشن و از اونها به عنوان ساختاری که داده های مرتبط به رشته رو به طور منظم نگهداری میکنه میشه یاد کرد. به طور کلی زمانی از t-string استفاده میکنید که شیوه ایجاد متن شما هم مهم هست و نیاز دارید که بدونید چه object هایی به عنوان ورودی و در چه قالبی داده شدند. اینطور با دست باز قادر به validate کردن اونها هستید و عملا از نحوه ایجاد رشتهای که در نهایت قراره خروجی شما باشه آگاهید.
این یعنی t-string ها حتی string نیستند! برای گرفتن خروجی حتما به یک processor نیاز هست که درواقع صرفا استفاده کننده template ماست.
تا قبل از ارائه میتونید خودتون نسخهای که در cpython پیادهسازی شده رو build و استفاده کنید. همچنین میتونید نمونه هایی از استفاده از این قابلیت رو اینجا مشاهده کنید. پیشنهاد میشه logging.py, web.py و reuse.py و مخصوصا fstring رو برای درک بهتر این ویژگی مطالعه کنید.
✍️ *ژنرال*
💎 Channel: @DevelopixPython#سوال ✨
خروجی کد زیر چیست ⁉️
✍️ *ژنرال*
💎 Channel: @DevelopixPython
💠 توابع
مفهوم تابع چیه؟ تابع یک مفهوم کلی و بنیادیه که در زمینههای مختلفی مثل ریاضیات، برنامهنویسی و حتی زندگی روزمره کاربرد داره. تعریف سادهای که میتونیم برای تابع بگیم به این شکله:
تابع ماشینی هست که ورودی میگیره و تبدیل میکنه به خروجی. یعنی ماشین تبدیل کننده ورودی به خروجی.مثال: فرض کنید دستگاه کالباسساز دارید. این دستگاه گوشت رو به عنوان ورودی دریافت میکنه و کالباس رو به عنوان خروجی تولید میکنه. پس این دستگاه یک تابعه که ورودی (گوشت) رو میگیره و خروجی (کالباس) تحویل میده. پس دستگاه ما یک تابع به شمار میره. خب حالا که مفهوم تابع رو فهمیدیم بریم یک سوال دیگه رو جواب بدیم: چرا باید از توابع استفاده کنیم؟ — دستهبندی و سازماندهی کدها: تابعها به ما کمک میکنن کد هامون مرتب و قابل مدیریت باشن. — قابلیت استفاده مجدد: با نوشتن یک تابع، میتونیم اون رو در بخشهای مختلف برنامه بارها و بارها استفاده کنیم. — کاهش طول کد: تابعها کمک میکنند کد ما کوتاهتر و خواناتر باشن. — افزایش خوانایی و نگهداری کد: کدهایی که از تابع استفاده میکنن، قابل فهمتر و آسونتر برای تغییر و توسعه هستن. برنامهنویسی بدون تابع ممکنه؟ شاید نه. تابعها به ما امکان میدن که هر زمان خواستیم یه قطعه کد رو اجرا کنیم، بدون اینکه نیاز باشه اون رو دوباره بنویسیم. اگر کدی بیرون از تابع باشه، به صورت خط به خط اجرا میشه و درکل کنترل کمتری روی اون داریم. حالا که مفهوم تابع رو فهمیدیم، وقتش رسیده که یاد بگیریم که چطور یک تابع پایتونی بنویسیم. سینتکس ساخت تابع در پایتون به این صورته:
def function_name(param1, param2, ...):
...
— def: این کلمه کلیدی مخفف "define" هست و برای تعریف یک تابع استفاده میشه.
— function_name: نامی که برای تابع انتخاب میکنیم. این نام بهتره حالت توصیفی داشته باشه و نشوندهنده این باشه که تابع چه کاری انجام میده.
— parameter: ورودیهایی که تابع قراره دریافت کنه. این ورودیها داخل پرانتز مشخص میشن و به اونها پارامتر (آرگومان) میگیم.
آیا تابع میتونه ورودی (آرگومان) نداشته باشه؟ بله. تابع میتونه یک دستورالعمل خاص رو بدون داشتن ورودی انجام بده.
داخل تابع با استفاده از ایندنت (indent) کدهایی که قراره اجرا بشن رو مینویسیم. حالا تابع ما آمادهست تا ورودی دریافت کنه و پردازش رو انجام بده.
بعد از پردازش کار توی تابع، معمولاً نیاز داریم که نتیجه یا خروجی رو از تابع بگیریم. برای این کار از کلمه کلیدی return استفاده میکنیم:
return value
— مقداری (یا مقدار هایی) که جلوی کلمه return قرار میدیم، از تابع خارج میشه و میتونه هر چیزی باشه، مثل عدد، رشته، لیست، متغیر، یا حتی یه تابع دیگه!
— اگر هیچ مقداری رو با return از تابع خارج نکنیم، به صورت پیشفرض مقدار None از تابع خارج میشه. این یعنی تمام تابعها خروجی دارن، حتی اگر چیزی مشخص نکرده باشیم.
آیا با تعریف کردن تابع، کارمون تموم میشه؟ خیر! باید تابع رو صدا بزنیم تا اجرا بشه.
سینتکس صدا زدن تابع به این صورته:
function_name(value1, value2, ...)
— در اینجا، اسم تابع رو مینویسیم و مقادیر ورودی (پارامترها) رو به اون میدیم.
— وقتی تابع اجرا بشه، خروجی هم تولید میشه. اما اگر بخوایم خروجی رو ذخیره کنیم، باید اون رو به یه متغیر اختصاص بدیم:
result = function_name(value1, value2, ...)
به ای صورت تابعی رو تعریف میکنیم و ازش استفاده میکنیم.
🔖 #Python, #پایتون, #تابع, #function
👤 Yasin
💎 Channel: @DevelopixPython#سوال ✨
خروجی کد زیر چیست ⁉️
✍️ *ژنرال*
💎 Channel: @DevelopixPython
#سوال ✨
خروجی کد زیر چیست ⁉️
✍️ *ژنرال*
💎 Channel: @DevelopixPython
🔵نکات برنامهنویسی پایتون
⚪️ بخش اول
💠 از کدوم مورد استفاده میکنین برای اینکه بفهمین یک متغییر None هست یا نه؟
1) obj is None
2) obj == None
❗️ هیچوقت از روش دوم استفاده نکنین
به چند دلیل:
- استفاده از is بهینه تره و مستقیم ادرس مموری رو بررسی میکنه و از چیزای اضافی پرهیز میکنه
- استفاده از == برای این مورد کاملا خطرناکه و ممکنه باعث ایجاد ارور بشه. چرا؟ کد رو ببینید:
class Example:
def __eq__(self, _):
return True
e = Example()
print(e == None)
print(e is None)
🔖 #Python, #پایتون
👤 REZA P
💎 Channel: @DevelopixPython
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
