جنگولرن
3.77K subscribers
284 photos
73 videos
31 files
549 links
آموزش Django و بستگان
Download Telegram
عبارات شرطی در جنگو (Conditional Expressions) ⚖️
از لینکدین علی سیرجانی
با یکم کم کردن متن، که اینجا جا بشه 😬

فرض کن یه مدل به اسم Product داری که می خوای براساس قیمت هر محصول، یه لیبل توی کوئری ست برگردونی:
- اگه قیمت کمتر از ۱۰ باشه → لیبل cheap
- اگه بین ۱۰ تا ۵۰ باشه → لیبل moderate
- اگه ۵۰ یا بیشتر باشه → لیبل expensive
- و اگه هیچ کدوم از شرایط بالا نباشه → لیبل پیش فرض unknown

با استفاده از ابزارهای شرطی مثل Case و When توی Django ORM، این کار خیلی تمیز و بهینه انجام می شه. (نمونه کد داخل تصویر)

🔍 چی داریم اینجا؟
- از Case برای ساختن یک عبارت شرطی کلی استفاده کردیم.
- When شرط های مختلف رو بررسی می کنه.
- then مشخص می کنه اگر اون شرط برقرار بود، چه مقداری برگشت داده بشه.
- و برای مقداردهی به then یا default از ()Value استفاده کردیم.

💡 Value چیه؟
وقتی می خواید یک مقدار ثابت (مثل عدد، رشته، لیست و...) رو مستقیماً داخل کوئری دیتابیس استفاده کنید، از ()Value استفاده می کنید. این کار باعث میشه جنگو بفهمه که اون مقدار، یه فیلد از دیتابیس نیست، بلکه یه مقدار ثابته که باید وارد کوئری بشه.
👍29👎1🔥1👏1
Forwarded from Python BackendHub
داشتم ویدیو مصاحبه عثمان رو میدیدم با امیربهادر که شاخکام تکون خورد بیشتر راجب yield تحقیق کنم.

سوال) کاربرد yield چیه تو پایتون؟
جواب: یک جنریتور فانکشن که memory efficient هست و مثلا از دیسک میخواین ۱۰۰ گیگ فایل بخونید نیاز نیست کلشو یک دفعه لود کنید تو مموری و میتونید ۱۰۰ مگ ۱۰۰ مگ لود کنید تو مموری

مقاله اول) yield چطور تو سطح پایتون کار میکنه؟ (نسبتا ساده, اسکیپ کنید اگه بلدین)
همونطور که گفتم yield یک جنریتور فانکشن هست. ولی یعنی چی؟
یعنی وقتی کلمه yield رو میذارین و اون تابع رو ران میکنید به جای اینکه یک آبجکت بهتون ریترن کنه بهتون یک جنریتور ریترن میکنه.

هردفعه که next() رو بزنید یک بار اجرا میشه و تا yield بعدی میره.اگه yield دیگه ای نباشه دیگه چیزی ران نمیکنه و ارور StopIteration میده.
یک نکته کلیدی. پس وقتی میخوایم کلین آپ کنیم همینطوری next(my_generator) رو صدا میزنیم تا به اخرین خط کد برسه و ارور بده. درواقع تو asyncio pytest همین اتفاق میفته. ما یک آبجکت رو yield میکنیم. خود asyncio-pytest پلاگین میاد next() میزنه روش و آبجکتو میگیره. بعد به کل تستا پاس میده همون آبجکتو. بعدش هم یک دور دیگه next() رو میزنه و میدونه ما بعد yield اول کلین آپ کردیم. اون موقع کلین آپ تست ما هم ران میشه که خیلی قشنگ تر unittest پایتون هست.



def my_gen():
yield 1
print("Clean up here")

generator = my_gen()
next(generator) -> 1
next(generator) -> prints clean up here -> raise StopIteration


خب تا اینجا فهمیدیم تو سطح پایتون چطوری کار میکنه generator و yield.
حالا میریم یک لایه پایین تر تو سطح interpreter 😈

@ManiFoldsPython
👍202👎1🔥1
نظر شما در مورد این متن چیه؟
لایک یا دیسلایک هم کافیه


Free things often fail to leave a lasting impression. Why?

Behavioral economist Dan Ariely points out an intriguing aspect of human behavior: we attach greater value to things when we have invested effort or participated in a social experience - even if money never changed hands.

If your goal is to create lasting connections or memories, simply handing out freebies isn't enough. Instead, find meaningful ways for people to engage - emotionally, socially, or creatively. By creating a moment worth remembering, you increase the perceived value of the experience itself.

What are your thoughts on this approach?
👍21👎81
Forwarded from ChatGPT 4.5 | DeepSeek | Midjourney
دکوریتور lru_cache یکی از ابزارهای جالب و کاربردی در پایتون هست که به ما کمک می‌کنه تا عملکرد برنامه‌هامون رو با ذخیره‌سازی نتایج محاسبات قبلی بهبود ببخشیم. این دکوریتور به صورت خودکار نتایج تابع رو برای ورودی‌های تکراری ذخیره می‌کنه و وقتی هم که همون ورودی دوباره فراخوانی بشه، به جای محاسبه دوباره، نتیجه رو از حافظه می‌گیره.

فرض کن که یه تابع داریم که فاکتوریل یک عدد رو محاسبه می‌کنه. اگر بخوایم این تابع رو با lru_cache دکوریتور کنیم، به این صورت می‌شه:

from functools import lru_cache

@lru_cache(maxsize=None) # maxsize می‌تونه محدودیت حافظه رو تعیین کنه
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)

print(factorial(5)) # خروجی: 120
print(factorial(5)) # اینجا دیگه محاسبه نمی‌شه و سریعاً از کش برمی‌گرده


اینجا وقتی که factorial(5) رو برای بار اول صدا می‌زنیم، تمام مراحل محاسبه انجام می‌شه و نتیجه 120 برمی‌گرده. اما وقتی دوباره همین تابع رو با همون ورودی صدا بزنیم، دیگه نیازی به محاسبه نیست و نتیجه از کش برمی‌گرده که خیلی سریع‌تره!

پس با استفاده از lru_cache می‌تونیم سرعت برنامه‌هامون رو بالا ببریم و کارایی رو بهبود بدیم.
🔥15👍9👎1
تجربه مصاحبه از کانال pyHints با یکم حذفیات از پست اصلی

سیستمی رو پیاده سازی کن که بعنوان ورودی یک استرینگ از محاسبات ریاضی بصورت infix دریافت کنه؛ بتونه خروجی رو بصورت postfix, یا prefix (هرکدوم راحت‌تری) تحویل بده یا اگر object اون کلاس صدا زده شده؛ با استفاده از postfix/prefix پیاده‌سازی شده محاسبات رو انجام بده و خروجی رو تحویل.

من اینو یادمه که با postfix حل کردم چون راحت‌تر بود (stack) :
اما چندتا چیز رو بررسی می‌کرد:
۱- چون صحبت از object شد باید. OOP می‌بود
۲- حتماً باید call رو براش پیاده‌سازی می‌کردم که callable باشه (این یعنی داندر متود‌ها رو می‌شناسم)
۳- سراغ پیاده‌سازی ساده‌تر رفتم (تصمیم گیری و شناخت مسأله، البته توضیح هم دادم چرا بنظرم ساده‌تر هست و ...)
۴- استفاده از stack که بعد خود stack رو پیاده‌سازی کردم (آشنایی با DS, حتی بحث هم کردم بین LinkedList, Array چرا و کدوم رو انتخاب می‌کنم برای ساخت stack) .

اگر خواستید پیاده‌سازی کنید این حالات رو تست کنید (تو مصاحبه از مصاحبه کننده باید پرسیده بشه)

۱- سیستم ورودی invalid داشته باشه؛ خروجی برای هر دو حالت None هست
۲- سیستم infix برای اولویت دادن به محاسبات از () ممکنه استفاده کنه
۳- سیستم فقط از ۴ عمل اصلی + پرانتز پشتیبانی خواهد کرد
۴- ورودی‌های عددی ممکنه float/int باشه
۵- ممکنه بین کاراکترها space باشه یا نباشه
"17+3.5" or "17 + 3.5"
هر دو درست هست.
👍64🔥1🤮1
بکند کارها به این چیزا دقت نمیکنن. اما جالب بود. از لینکدین سعید خسروی:

یه ترفند کوچیک ولی مهم توی طراحی رابط کاربری که خیلی وقتا نادیده گرفته می‌شه 👇

اشتباه رایج: وقتی یه کانتینر (مثلاً یه کارت یا باکس) داخل یه کانتینر بزرگ‌تر قرار می‌گیره، بعضی‌ها میان و برای هر دو یه border-radius برابر می‌ذارن. نتیجه‌اش چی می‌شه؟ گوشه‌های تیز و ناهماهنگ که حس تمیزی طراحی رو از بین می‌بره!

راه‌حل درست: شعاع گوشه‌ی بیرونی باید برابر باشه با شعاع گوشه‌ی داخلی به‌علاوه‌ی فضای خالی (padding) بین اون‌ها.

مثلاً اگه border-radius عنصر داخلی ۱۶ پیکسل باشه و فاصله بین اون و عنصر بیرونی ۸ پیکسل باشه، پس border-radius عنصر بیرونی باید ۲۴ پیکسل باشه.

اینجوری گوشه‌ها دقیقاً هم‌مرکز و تمیز درمیاد و طراحی حرفه‌ای‌تر دیده می‌شه.
👍2851
Forwarded from سید فرندز / برنامه نویسی (Mohammad Khoshnava)
تو این ویس غر زدم به افرادی که مدام میگن مدرن پایتون کد بزنید و تایپینک پیشرفته استفاده کنید و …

حتی میگن جنگو کد نزنید شمارو تنبل میکنه
بابا بیا برو مسخرمون نکن، بزار کارمون رو‌بکنیم پروژه لانچ بشه

یکجور پایتون کد میزنن از cpp پیچیده تر، اه
@MohamadKhoshnava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18👎5
سید فرندز / برنامه نویسی
Voice message
نمیشه یه جاهایی ش رو بوووق بزارم
ولی نکته قابل تاملی میگه
تابستون طلایی دانشجویار
هر خرید طلایی ، یک شانس برای بردن جایزه است!

تا 75 درصد تخفیف برای دوره های طلایی

https://www.daneshjooyar.com/landing/summer1404/
👏2
Forwarded from Learning With M
خیلی ها پرسیدن، تو که ۲۲ سال دات نت کار کردی، چرا الان java و golang و php؟
سوال خوبیه.

اگر ما مهندس نرم افزار هستیم، زبان میشه ابزار توسعه نرم افزار و هرچی باشه مهم نیست.

اگر برنامه نویس دات نت یا هر زبان دیگری هستیم و نمی‌خواهیم رهاش کنیم، میشیم برنامه نویس اون زبان.

برنامه نویسی ۳۰ الی ۴۰٪ مهندسی نرم افزاره.

نظر شخصیم اینه که : اگر به زبان برنامه نویسی خاصی وابستگی زیادی دارید، احتمالا به زودی AI با هزینه خیلی کمتر از انسان اونو برامون انجام خواهد داد، ولی اگر مهندسیتون رو تقویت کنید، AI قراره ۳۰ الی ۴۰% کارتون رو که همون برنامه نویسی باشه رو راحت تر کنه.
👍255👎5👏2🤮1🥱1
اضافه کردن یک CustomValidator به ولیدیتور پسورد در پروژه جنگو

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

تشکر از عمو جی پی تی
👍5
😂
😁35👏2