در کد زیر سعی شده با استفاده از یک decorator ساده، تعداد دفعات صدا زده شدن هر تابع در یک دیکشنری سراسری ذخیره شود، اما بهخاطر یک اشتباه در نحوه استفاده از
سوال:
در این کد چه چیزی باید اصلاح شود تا شمارندهٔ فراخوانی توابع بهدرستی کار کند و
🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
global، شمارنده بهدرستی عمل نمیکند و ممکن است خطا یا رفتار اشتباه داشته باشد.سوال:
در این کد چه چیزی باید اصلاح شود تا شمارندهٔ فراخوانی توابع بهدرستی کار کند و
call_counts بدون خطا و به شکل صحیح بهروزرسانی شود؟call_counts = {}
def count_calls(func):
def wrapper(*args, **kwargs):
global call_counts
if func.__name__ not in call_counts:
call_counts = {}
call_counts[func.__name__] = call_counts.get(func.__name__, 0) + 1
return func(*args, **kwargs)
return wrapper
@count_calls
def slow_add(a, b):
return a + b
for _ in range(3):
slow_add(1, 2)
print(call_counts)🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
❤2👍1
در قطعهکد زیر از ویژگی late binding در closureهای پایتون و همینطور از عملگر is روی اعداد استفاده شده است.
خروجی اجرای این کد (خطوط چاپشده در ترمینال) دقیقا چه خواهد بود؟
پاسخ را دقیقا مطابق خروجی نهایی بنویسید.
🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
خروجی اجرای این کد (خطوط چاپشده در ترمینال) دقیقا چه خواهد بود؟
پاسخ را دقیقا مطابق خروجی نهایی بنویسید.
🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
👎3❤2🔥1
Forwarded from ابر ویراک
زیرساختی مطمئن برای کسب و کارهای آنلاین
📞 همین حالا با ما تماس بگیرید و این فرصت فوقالعاده رو از دست ندید!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
FastAPI یه فریمورک مدرن برای ساخت Web API تو پایتونه که کامل روی type hints سوار شده و برای ساخت سرویسهای سریع و قابل نگهداری عالیه. بر پایه Starlette و Pydantic ساخته شده و روی ASGI اجرا میشه.
چرا مفیده؟
• سرعت خیلی بالا (نزدیک به Node و Go) 🚀
• داکیومنتیشن خودکار OpenAPI و Swagger UI بدون هیچ کار اضافه
• اعتبارسنجی ورودیها با type hint و Pydantic
• پشتیبانی راحت از async / await برای I/O سنگین (DB، HTTP call و...)
نمونهی استفاده:
این سبک برای ساخت microserviceها، backend موبایل، سرویس داخلی شرکت، و APIهای دادهمحور خیلی جواب میده؛ هم سریع توسعه میدی هم مستندات تمیز و قابل تست تحویل میدی.
Docs رسمی:
https://fastapi.tiangolo.com
GitHub:
https://github.com/tiangolo/fastapi
امتحانش کن روی یه API کوچک داخلی؛ معمولاً بعد از یه پروژه کامل بهش عادت میکنی 😄
🔖 #Python #پایتون #FastAPI #Python #Backend #API #Web
👤 Developix
💎 Channel: @DevelopixPython
چرا مفیده؟
• سرعت خیلی بالا (نزدیک به Node و Go) 🚀
• داکیومنتیشن خودکار OpenAPI و Swagger UI بدون هیچ کار اضافه
• اعتبارسنجی ورودیها با type hint و Pydantic
• پشتیبانی راحت از async / await برای I/O سنگین (DB، HTTP call و...)
نمونهی استفاده:
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
app = FastAPI()
@app.post("/items")
async def create_item(item: Item):
return {"message": f"created {item.name}", "price": item.price}
این سبک برای ساخت microserviceها، backend موبایل، سرویس داخلی شرکت، و APIهای دادهمحور خیلی جواب میده؛ هم سریع توسعه میدی هم مستندات تمیز و قابل تست تحویل میدی.
Docs رسمی:
https://fastapi.tiangolo.com
GitHub:
https://github.com/tiangolo/fastapi
امتحانش کن روی یه API کوچک داخلی؛ معمولاً بعد از یه پروژه کامل بهش عادت میکنی 😄
🔖 #Python #پایتون #FastAPI #Python #Backend #API #Web
👤 Developix
💎 Channel: @DevelopixPython
👍8👎2
Forwarded from ابر ویراک
زیرساختی مطمئن برای کسب و کارهای آنلاین
📞 همین حالا با ما تماس بگیرید و این فرصت فوقالعاده رو از دست ندید!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
📌 باز و بسته کردن فایل با context manager
خیلی وقت cها توی کدهای Python دیده می cشه فایل رو با
راه تمیز و Pythonic استفاده از کلمهٔ کلیدی
اینجا
نکتهٔ مهم دیگه اینه که
این الگو رو می cشه برای چند فایل همزمان هم استفاده کرد:
امتحان این الگو توی پروژه cهای فعلی، مخصوصاً جاهایی که با فایل، شبکه یا هر منبع خارجی کار می cشه، یکی از سریع cترین بهبودهای کد محسوب می cشه. ✨
منبع رسمی برای جزئیات بیشتر:
Python Docs - The with statement
🔖 #Python #پایتون #Python #File_I/O #Context_Manager #Best_Practices #Code_Readability
👤 Developix
💎 Channel: @DevelopixPython
خیلی وقت cها توی کدهای Python دیده می cشه فایل رو با
open() باز می cکنیم، ولی فراموش می cکنیم ببندیمش. این کار می cتونه باعث Memory Leak، خطاهای عجیب روی سیستم فایل و قفل شدن فایل بشه.راه تمیز و Pythonic استفاده از کلمهٔ کلیدی
with هست که خودش به cصورت خودکار فایل رو می cبنده، حتی اگر وسط کار Exception بیاد. 😎# ❌ روش ضعیف
f = open("data.txt", "r", encoding="utf-8")
text = f.read()
# اگر اینجا Exception بیاد، f.close() هرگز صدا زده نمی cشه
f.close()
# ✅ روش پیشنهادی با context manager
with open("data.txt", "r", encoding="utf-8") as f:
text = f.read()
print(len(text))
اینجا
with تضمین می cکنه بعد از اتمام بلاک، چه کد موفق اجرا بشه چه Exception رخ بده، متد f.close() صدا زده بشه. این دقیقاً رفتاریه که برای منابع حساس مثل فایل، کانکشن دیتابیس، و ساکت cها می cخوایم. 🔐نکتهٔ مهم دیگه اینه که
with کد رو خواناتر و قابل cاعتمادتر می cکنه؛ هر کسی کد رو ببینه، فوراً متوجه scope استفاده از منبع می cشه و لازم نیست دنبال close() بگرده.این الگو رو می cشه برای چند فایل همزمان هم استفاده کرد:
with open("input.txt", "r", encoding="utf-8") as fin, \
open("output.txt", "w", encoding="utf-8") as fout:
for line in fin:
fout.write(line.upper())
امتحان این الگو توی پروژه cهای فعلی، مخصوصاً جاهایی که با فایل، شبکه یا هر منبع خارجی کار می cشه، یکی از سریع cترین بهبودهای کد محسوب می cشه. ✨
منبع رسمی برای جزئیات بیشتر:
Python Docs - The with statement
🔖 #Python #پایتون #Python #File_I/O #Context_Manager #Best_Practices #Code_Readability
👤 Developix
💎 Channel: @DevelopixPython
الگوی Strategy: خداحافظ if-elif-elseهای غولآسا 🧠
یکی از Code Smellهای رایج در پروژههای Python، بهخصوص در Django / FastAPI، زنجیرههای بزرگ if / elif برای انتخاب نوع رفتار است. این ساختارها هم سخت تست میشوند، هم هر تغییر کوچکی را پرریسک میکنند.
یک راهحل تمیز و شناختهشده در Design Patternها برای این مشکل، الگوی Strategy است. این الگو منطقهای قابلجایگزین (قابل تعویض) را در آبجکتهای جدا نگه میدارد و کد را قابلگسترش و خواناتر میکند. 🙌
مثال ساده: فرض کنید در یک سرویس پرداخت، بسته به نوع روش پرداخت، منطق متفاوتی دارید:
این کلاس هم تکمسئولیتی نیست، هم هر بار روش جدیدی اضافه میشود باید کلاس را ادیت کنیم. زیر پا گذاشتن اصل Open/Closed.
با Strategy همین منطق را تمیز میکنیم:
حالا انتخاب Strategy میتواند در لایهی وب (مثلاً FastAPI endpoint) انجام شود و PaymentService تمیز و قابلتست میماند:
نکته عملی قابلاستفاده امروز ✅
هرجا یک تابع یا view دارید که براساس یک نوع (type / method / status) با if-elifهای زیاد شاخهبندی میکند، آن منطق را به کلاسهای کوچکتر Strategy تبدیل کنید و یک mapping تمیز بسازید. این کار هم خوانایی را بالا میبرد، هم اضافهکردن رفتار جدید را بدون دستزدن به منطق قدیمی ممکن میکند.
برای مطالعهی عمیقتر درباره Strategy:
refactoring.guru/design-patterns/strategy
کد تمیز با الگوهای درست، در پروژههای واقعی Python تفاوت جدی در سرعت توسعه و لذت کار ایجاد میکند. 🚀 امروز یکی از if-elifهای سنگین پروژهتان را به یک Strategy تمیز تبدیل کنید و نتیجه را در نگهداری و تستها ببینید.
🔖 #Python #پایتون #python #strategy_pattern #clean_code #design_patterns #architecture #refactoring
👤 Developix
💎 Channel: @DevelopixPython
یکی از Code Smellهای رایج در پروژههای Python، بهخصوص در Django / FastAPI، زنجیرههای بزرگ if / elif برای انتخاب نوع رفتار است. این ساختارها هم سخت تست میشوند، هم هر تغییر کوچکی را پرریسک میکنند.
یک راهحل تمیز و شناختهشده در Design Patternها برای این مشکل، الگوی Strategy است. این الگو منطقهای قابلجایگزین (قابل تعویض) را در آبجکتهای جدا نگه میدارد و کد را قابلگسترش و خواناتر میکند. 🙌
مثال ساده: فرض کنید در یک سرویس پرداخت، بسته به نوع روش پرداخت، منطق متفاوتی دارید:
class PaymentService:
def pay(self, method: str, amount: int) -> None:
if method == "card":
print("Paying by card", amount)
elif method == "paypal":
print("Paying by PayPal", amount)
elif method == "crypto":
print("Paying by crypto", amount)
else:
raise ValueError("Unsupported method")
این کلاس هم تکمسئولیتی نیست، هم هر بار روش جدیدی اضافه میشود باید کلاس را ادیت کنیم. زیر پا گذاشتن اصل Open/Closed.
با Strategy همین منطق را تمیز میکنیم:
from abc import ABC, abstractmethod
class PaymentStrategy(ABC):
@abstractmethod
def pay(self, amount: int) -> None:
...
class CardPayment(PaymentStrategy):
def pay(self, amount: int) -> None:
print("Paying by card", amount)
class PaypalPayment(PaymentStrategy):
def pay(self, amount: int) -> None:
print("Paying by PayPal", amount)
class CryptoPayment(PaymentStrategy):
def pay(self, amount: int) -> None:
print("Paying by crypto", amount)
class PaymentService:
def __init__(self, strategy: PaymentStrategy) -> None:
self._strategy = strategy
def pay(self, amount: int) -> None:
self._strategy.pay(amount)
حالا انتخاب Strategy میتواند در لایهی وب (مثلاً FastAPI endpoint) انجام شود و PaymentService تمیز و قابلتست میماند:
def get_strategy(method: str) -> PaymentStrategy:
mapping = {
"card": CardPayment(),
"paypal": PaypalPayment(),
"crypto": CryptoPayment(),
}
try:
return mapping[method]
except KeyError:
raise ValueError("Unsupported method")
نکته عملی قابلاستفاده امروز ✅
هرجا یک تابع یا view دارید که براساس یک نوع (type / method / status) با if-elifهای زیاد شاخهبندی میکند، آن منطق را به کلاسهای کوچکتر Strategy تبدیل کنید و یک mapping تمیز بسازید. این کار هم خوانایی را بالا میبرد، هم اضافهکردن رفتار جدید را بدون دستزدن به منطق قدیمی ممکن میکند.
برای مطالعهی عمیقتر درباره Strategy:
refactoring.guru/design-patterns/strategy
کد تمیز با الگوهای درست، در پروژههای واقعی Python تفاوت جدی در سرعت توسعه و لذت کار ایجاد میکند. 🚀 امروز یکی از if-elifهای سنگین پروژهتان را به یک Strategy تمیز تبدیل کنید و نتیجه را در نگهداری و تستها ببینید.
🔖 #Python #پایتون #python #strategy_pattern #clean_code #design_patterns #architecture #refactoring
👤 Developix
💎 Channel: @DevelopixPython
❤6👎2
در نمونهکد بالا تابع load_rows اول همهی دادهها را یکجا در مموری میریزد و بعد روی آنها loop میزند؛ این کار روی فایلهای بزرگ باعث Memory مصرفی بالا و حتی کرش برنامه میشود. در عوض، با برگرداندن یک generator و استفاده از
🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
yield میتوانید خطوط را بهصورت lazy و streamشده پردازش کنید تا هم مصرف مموری کم شود و هم عملکرد در سناریوهای پردازش فایلهای بزرگ (مثلاً لاگهای چندگیگابایتی) بهتر شود. بهخصوص در برنامههای ETL، پردازش لاگ و data pipelineها، این الگو نسبت به رویکرد لیستمحور نمونهی اول یک Design بهمراتب پایدارتر و scalable محسوب میشود.🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
👍6👎1
👨💻 سوال برای توسعهدهندگان Python
خروجی اجرای کد زیر در Python چیست؟
به تفاوت بین متغیرهای سازنده (constructor) و متغیرهای کلاس و همینطور نحوهٔ ذخیره شدن default argumentها در حافظه دقت کنید.
خروجی دقیق تابع
🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
خروجی اجرای کد زیر در Python چیست؟
به تفاوت بین متغیرهای سازنده (constructor) و متغیرهای کلاس و همینطور نحوهٔ ذخیره شدن default argumentها در حافظه دقت کنید.
class A:
cache = []
def __init__(self, items=None):
if items is None:
items = []
self.items = items
self.cache.append(len(self.items))
x = A([1, 2])
y = A()
z = A()
x.items.append(3)
y.items.extend([10, 20])
print(x.items, y.items, z.items, A.cache)
خروجی دقیق تابع
print را بنویسید.🔖 #Python #پایتون
👤 Developix
💎 Channel: @DevelopixPython
👍1
Forwarded from کانال رسمی تک نت | Taknet
⏰ تعداد محدود – برای استفاده از این تخفیف ویژه سریع اقدام کن!
برای اطلاعات بیشتر و سفارش، تماس بگیر:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1