| کانال توسعه‌دهندگان پایتون |
6.69K subscribers
41 photos
2 videos
4 files
43 links
⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
🔥 تخفیف بزرگ سرور اختصاصی ابری هاست ایران از امروز شروع شد!🚀

🛸 ما تو هاست ایران با توجه به درخواست‌های پرتکرار شما، یک سرویس متفاوت راه انداختیم:
🌩 سرور اختصاصی ابری – ترکیبی از قدرت سخت‌افزار اختصاصی با انعطاف و مقیاس‌پذیری فضای ابری

منابع کاملاً اختصاصی
پرداخت ساعتی یا ماهانه، فقط برای میزان مصرف واقعی (PAYG)
پشتیبانی از Nested Virtualization (نصب Hypervisor روی VM)
ساخت سریع ماشین‌مجازی ویندوز یا لینوکس
بکاپ خودکار و پشتیبانی ۲۴/۷
انتخاب دیتاسنتر نزدیک به کاربران شما

💵 فقط تا ۶ اردیبهشت فرصت دارید این سرویس رو با ۵۰٪ تخفیف ویژه تهیه کنید!💥

🟥 برای اطلاعات بیشتر و سفارش:
🔗 لینک مشاهده سرویس
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👎2
#سوال
کار کدام تابع زودتر به پایان می‌رسد ⁉️

✍️ *ژنرال*

💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
💠 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 ها واقعا خیلی راحت تر میشه و پایتون خیلی مهربون تر با این قضیه برخورد میکنه.

✍️ *ژنرال*

🏷 #Python, #PEP, #annotations, #typehint, #pep749, #NameError

💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124🔥3
💠 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
تبدیل فایل 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
🔥12👍42
🎯 بررسی پلتفرم‌های اجرای کد پایتون در موبایل

🔵 Android:

🐍 Pydroid 3

مزایا:
⬅️ ساپورت اکثر کتابخانه‌های پایتون
⬅️ دارای ترمینال و محیط گرافیکی GUI
⬅️ نسخه‌ی پرمیوم با قابلیت auto complete
⬅️ اجرای کدها بدون نیاز به اینترنت

معایب:
⬅️ نسخه‌ی پایتون ثابت و غیرقابل ارتقا
⬅️ برخی کتابخانه‌های سنگین در نسخه رایگان کار نمی‌کنند
⬅️ عملکرد کند ادیتور در پروژه‌های بزرگ


🐍 Termux

مزایا:
⬅️ محیط شبیه‌سازی شده لینوکس
⬅️ داشتن shell
⬅️ امکان نصب نسخه دلخواه از پایتون
⬅️ کنترل کامل روی پکیج‌ها و...
⬅️ استفاده از مفسر رسمی پایتون که از طریق بسته‌های apt نصب می‌شود

معایب:
⬅️ فاقد محیط گرافیکی به‌جز Tkinter که از طریق بسته‌های پایتون قابل نصب می‌باشد


⬜️ IOS

🐍 Pyto

مزایا:
⬅️ ساپورت از نسخه‌های پایتون و رابط کاربری
⬅️ امکان نصب بسیاری از کتابخانه‌ها

معایب:
⬅️ اجرای کند
⬅️ عدم ساپورت از برخی کتابخانه‌ها


🐍 Pythonista

مزایا:
⬅️ پشتیبانی از بسیاری از کتابخانه‌ها
⬅️ مناسب برای ساخت اپلیکیشن‌های ساده با رابط کاربری

معایب:
⬅️ نصب کتابخانه‌ها بصورت پیچیده
⬅️ نسخه‌ی پولی


🐍 Google Colab

مزایا:
⬅️ اجرای کد بدون نیاز به نصب نرم‌افزار از طریق Browser
⬅️ اجرای کدها در سرورهای قوی با مفسر پایتون
⬅️ امکان ذخیره نوت‌بوک‌ها و اشتراک‌گذاری آن‌ها

معایب:
⬅️ نیاز به اینترنت
⬅️ اجرای موقتی و...

🔖 #Python, #پایتون, #android, #ios, #pydroid, #pyto

👤 𝐏𝐫𝐨𝐠𝐫𝐚̷𝐦𝐦̷𝐞̷𝐫̷

💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍1
| کانال توسعه‌دهندگان پایتون |
تبدیل فایل Py به EXE بعضی اوقات لازم هست که فایل پایتونی‌مون رو تبدیل به یک فایل EXE کنیم تا راحت بتونیم اجراش کنیم. برای این کار ابزارهای زیادی هست، ولی یکی از راحت‌ترین و بی‌دردسرترین روش‌ها استفاده از cx_Freeze هست. حالا بریم ببینیم چطوری میشه ازش استفاده…
تبدیل فایل 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
👍96
تبدیل فایل 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
6👍4🔥3
خروجی تابع 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
13👎1
🔢 تبدیل عددهای نوشته‌شده با حروف به عدد واقعی در پایتون!

با استفاده از کتابخونه‌ی 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: @DevelopixPython
👍22👎145🔥1
#سوال

🔶 توضیح تصاویر:
با توجه به بنچمارک تصویر اول (P1) که تقریبا برابر با 6 ثانیه است نتیجه مورد انتظار در تصویر دوم (P2) با در نظر گرفتن اینکه دو تابع با پردازش یکسان فراخوانی شده و به دو thread مجزا ارسال شده، عدد مورد انتظار ~6 ثانیه است ولی این عدد تقریبا دو برابر نتیجه بنچمارک قبلیه که غیرقابل انتظاره.‌ در ادامه تصویر سوم‌ (P3) با قرار دادن تأخیر ۶ ثانیه داخل بلاک task_1 انتظار میره نتیجه برابر با 12 + 6 ثانیه باشه (با توجه به نتایج تصاویر قبلی) ولی این اتفاقا نمیفته.


🔶 سوال:
دلیل دو برابر شدن بنچمارک (P2) و عدم اعمال شدن تاخیر ۶ ثانیه‌ی (P3) را توضیح بدید؟



🔖 #Python, #پایتون

👤 ȺʍìɾⱮօհąʍʍąժ

💎 Channel: @DevelopixPython
👍74🔥2👎1