هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
2.66K subscribers
21 photos
14 videos
5 files
82 links
Download Telegram
#خبر #هوش_مصنوعی #ClaudeCode
‌
✨ دستور ultrathink به Claude Code برگشت
📰 قابلیت جدید
‌
وقتی تسکی که به Claude Code دادید سخت‌تر از انتظار درمیاد، لازم نیست کار رو قطع کنید و از اول شروع کنید. همون وسط کار، کافیه کلمه ultrathink رو تایپ کنید تا میزان فکر و تلاش مدل برای ادامه همون نوبت بیشتر بشه.
‌
تیم Claude Code این دستور رو مدتی خاموش کرده بود و حالا در آخرین نسخه CLI دوباره فعاله. اگه کار نکرد، اول Claude Code رو به‌روز کنید:
claude update

‌
🎁 این دستور فقط روی همون نوبت اثر داره و طبیعتاً توکن بیشتری مصرف می‌کنه، پس برای کارهای ساده لازمش ندارید.
‌
🔗 اعلام بازگشت ultrathink در X
‌
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
#آموزش #پایتون
‌
⚡️ می‌دونستین با defaultdict دیگه لازم نیست قبل از اضافه کردن به دیکشنری، وجود کلید رو چک کنید؟
‌
توی defaultdict از ماژول collections، اگه کلیدی وجود نداشته باشه، خودش یک مقدار پیش‌فرض براش می‌سازه. مثلاً برای گروه‌بندی کلمه‌ها بر اساس حرف اولشون:
‌
from collections import defaultdict

words = ["apple", "bread", "avocado", "banana", "cherry"]
groups = defaultdict(list)
for word in words:
groups[word[0]].append(word)
print(dict(groups))

‌
خروجی:
‌
{'a': ['apple', 'avocado'], 'b': ['bread', 'banana'], 'c': ['cherry']}

‌
این‌جا list یعنی «برای هر کلید جدید یک لیست خالی بساز»؛ پس append همیشه کار می‌کنه و دیگه نه if لازمه، نه به KeyError می‌خوریم.
‌
✔️ شمارش با defaultdict(int)
تابع int اگه بدون ورودی صدا زده بشه، عدد 0 برمی‌گردونه؛ پس شمارش هر کلید جدید از صفر شروع می‌شه:
‌
from collections import defaultdict

text = "red blue red green red"
counts = defaultdict(int)
for color in text.split():
counts[color] += 1
print(dict(counts))

‌
خروجی:
‌
{'red': 3, 'blue': 1, 'green': 1}

‌
اگه فقط شمارش لازم دارید، Counter امکانات بیشتری مثل most_common داره؛ defaultdict جایی به کار میاد که مقدار پیش‌فرض چیز دیگه‌ای باشه (لیست، مجموعه، یا هر مقدار دلخواه).
‌
💎 هر مقدار پیش‌فرضی که بخواید
ورودی defaultdict می‌تونه هر تابعی باشه که بدون آرگومان صدا زده می‌شه؛ مثلاً یک lambda:
‌
from collections import defaultdict

roles = defaultdict(lambda: "guest")
roles["ali"] = "admin"
print(roles["ali"], roles["sara"])

‌
خروجی:
‌
admin guest

‌
کاربر sara اصلاً ثبت نشده بود، ولی به‌جای KeyError مقدار guest گرفت.
‌
⚠️ فقط خوندن یک کلید هم اون رو اضافه می‌کنه
وقتی با براکت سراغ کلیدی می‌رید که وجود نداره، defaultdict اون کلید رو با مقدار پیش‌فرض به دیکشنری اضافه می‌کنه؛ ولی متد get این کار رو نمی‌کنه:
‌
from collections import defaultdict

scores = defaultdict(int)
print(scores.get("sara"))
print(len(scores))
print(scores["ali"])
print(len(scores))

‌
خروجی:
‌
None
0
0
1

‌
متد get مقدار None داد و چیزی اضافه نشد (طول 0)؛ ولی scores["ali"] عدد 0 داد و کلید ali رو هم ساخت (طول 1). پس برای «فقط چک کردن» از in یا get استفاده کنید.
‌
▫️ برای چاپ یا تبدیل به دیکشنری معمولی، dict(groups) بنویسید؛ وگرنه print خروجی رو به شکل defaultdict(<class 'list'>, ...) نشون می‌ده.
‌
▫️ کلاس defaultdict زیرکلاس dict هست، پس هر جا dict کار می‌کنه (مثلاً json.dumps) این هم کار می‌کنه.
‌
▫️ نوع مقدار رو بدون پرانتز بدید: defaultdict(list) درسته؛ defaultdict(list()) خطای TypeError می‌ده، چون ورودی باید یک تابع باشه، نه یک لیست.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👏1
هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
#کوئیز #پایتون ‌ پیش‌نیاز: متد find رشته‌ها و شمارش اندیس از صفر ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. ‌ @codingyar
#پاسخ_کوییز #پایتون
‌
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
‌
✅ جواب درست: «2 ‎-1»
‌
متد find دنبال یک زیررشته توی رشته می‌گرده و اندیس (شمارهٔ جایگاه) اولین جایی که پیدا بشه رو برمی‌گردونه. اندیس‌ها توی پایتون از صفر شروع می‌شن: توی banana حرف b اندیس 0 داره، a اندیس 1 و اولین n اندیس 2؛ پس first برابر 2 می‌شه.
‌
نکتهٔ ویژهٔ این کوییز: اگه زیررشته پیدا نشه، find نه خطا می‌ده و نه None برمی‌گردونه؛ طبق مستندات پایتون عدد ‎-1 رو برمی‌گردونه. چون z توی banana نیست، missing برابر ‎-1 می‌شه.
‌
اشتباه‌های رایج: گزینهٔ «3 ‎-1» یعنی شمردن جایگاه‌ها از یک، مثل شمردن معمولی خودمون. گزینهٔ «2 None» یعنی فکر کنیم وقتی چیزی پیدا نشه، «هیچی» برمی‌گرده. گزینهٔ «ValueError» هم از اینجا میاد که متد index دقیقاً همین کار رو می‌کنه، ولی وقتی چیزی پیدا نشه واقعاً ValueError می‌ده؛ find این‌طوری نیست.
‌
پس اگه فقط می‌خواید بدونید یک متن داخل رشته هست یا نه، عملگر in خواناتره؛ و اگه جایگاهش رو لازم دارید، از find استفاده کنید و حتماً حالت ‎-1 رو هم چک کنید.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
#خبر #هوش_مصنوعی #ClaudeAPI
‌
✨ قابلیت Message threads؛ API کلود برای مکالمه‌های طولانی سریع‌تر شد
📰 قابلیت جدید
‌
اگه با Messages API ایجنت یا چت طولانی می‌سازید، می‌دونید که هر نوبت باید کل مکالمه و نتیجه ابزارها دوباره فرستاده بشه. هرچه گفتگو بزرگ‌تر بشه، این بار اضافه زمان شروع جواب رو بالا می‌بره.
‌
Anthropic با Message threads که حالا بتای عمومی شده، این کار رو ساده کرده: اولین درخواست رو کامل می‌فرستید و thread می‌سازید؛ از نوبت بعد فقط پیام‌های تازه و شناسه پاسخ قبلی کافیه. Anthropic می‌گه در Claude Code با درخواست‌های ۵۰۰ هزار تا یک میلیون توکنی، میانه زمان رسیدن اولین توکن حدود ۳۵٪ کمتر شده.
‌
🛠 برای استفاده، هدر بتا و این پارامترها رو اضافه کنید:
anthropic-beta: message-threads-2026-08-12

"thread": {"type": "create"}

"thread": {"type": "continue",
"previous_message_id": "<id>"}

‌
⚠️ چند نکته: thread بعد از ۵ دقیقه بی‌استفاده‌ماندن منقضی می‌شه و باید کل مکالمه رو دوباره بفرستید. مصرف توکن تغییری نمی‌کنه، چون Claude باز هم کل گفتگو رو می‌خونه؛ فقط درخواست کوچک‌تر و شروع جواب سریع‌تره. روی پلتفرم Claude، AWS، Microsoft Foundry و Google Cloud با نرخ عادی در دسترسه.
‌
🔗 مستندات رسمی Message threads
‌
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2
#آموزش #گیت
‌
⚡️ می‌دونستین برای دور ریختن تغییرات یک فایل، دستور مخصوص git restore وجود داره؟
‌
دستور git restore تغییرات stage‌نشدهٔ یک فایل رو دور می‌ریزه و اون رو به نسخهٔ داخل stage برمی‌گردونه (اگه چیزی stage نکرده باشید، یعنی همون آخرین کامیت). فرض کنید توی app.py یک خط دیباگ اضافه کردید و می‌خواید پاکش کنید:
‌
echo "print('debug')" >> app.py
git status --short
git restore app.py
git status --short
cat app.py

‌
خروجی:
‌
 M app.py
print('v2')

‌
خط اول خروجی مال git status قبل از restore هست (حرف M یعنی فایل تغییر کرده). بعد از restore، دومین git status چیزی چاپ نمی‌کنه و cat نشون می‌ده فایل برگشته به محتوای آخرین کامیت.
‌
✔️ بیرون آوردن فایل از stage با ‎--staged
اگه فایلی رو اشتباهی add کردید، git restore --staged فقط اون رو از stage بیرون میاره و تغییراتش توی فایل می‌مونه:
‌
echo "print('debug')" >> app.py
git add app.py
git status --short
git restore --staged app.py
git status --short

‌
خروجی:
‌
M  app.py
M app.py

‌
جای حرف M عوض شد: ستون اول یعنی تغییر stage شده و ستون دوم یعنی تغییر فقط توی خود فایله. اگه می‌خواید هم از stage بیرون بیاد و هم تغییراتش پاک بشه، از این استفاده کنید:
‌
git restore --staged --worktree app.py

‌
💎 برگردوندن یک فایل از کامیت‌های قبلی
با --source می‌تونید نسخهٔ یک فایل رو از هر کامیت یا برنچی بیارید، بدون این‌که بقیهٔ پروژه تغییر کنه. این‌جا app.py دو کامیت داره (اول v1، بعد v2):
‌
git restore --source=HEAD~1 app.py
cat app.py
git status --short

‌
خروجی:
‌
print('v1')
M app.py

‌
حالا فایل نسخهٔ قبلی رو داره و به‌عنوان یک تغییر جدید دیده می‌شه؛ اگه همین رو می‌خواید، کامیتش کنید.
‌
⚠️ تغییرات دورریخته‌شده برنمی‌گردن
تغییری که هیچ‌وقت کامیت نشده، بعد از git restore جایی ذخیره نمی‌شه و reflog هم کمکی نمی‌کنه. اگه مطمئن نیستید، اول با git stash یک نسخه ازش نگه دارید.
‌
▫️ دستور git restore . همهٔ فایل‌های تغییرکرده توی پوشهٔ فعلی رو برمی‌گردونه، ولی به فایل‌های جدید (untracked) دست نمی‌زنه:
‌
echo "print('debug')" >> app.py
echo "temp" > notes.txt
git restore .
git status --short

‌
خروجی:
‌
?? notes.txt

‌
تغییر app.py پاک شد، ولی notes.txt (با علامت ??) سر جاشه.
‌
▫️ دستور restore از Git 2.23 (سال ۲۰۱۹) اضافه شده؛ قبل از اون همین کار با git checkout -- app.py انجام می‌شد.
‌
▫️ برای امتحان، یک مخزن تمرینی با دو کامیت بسازید و دستورهای بالا رو داخلش اجرا کنید:
‌
git init -q project
cd project
git config user.name "Demo"
git config user.email "demo@example.com"
echo "print('v1')" > app.py
git add app.py
git commit -q -m "first version"
echo "print('v2')" > app.py
git commit -q -am "second version"

‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
#کوئیز #پایتون ‌ پیش‌نیاز: متد split رشته‌ها و تابع len ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. ‌ @codingyar
#پاسخ_کوییز #پایتون
‌
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
‌
✅ جواب درست: «4 blue»
‌
متد split با جداکنندهٔ کاما، رشته رو هر جا کاما ببینه می‌بُره. توی red,green,,blue سه تا کاما داریم، پس چهار تکه به دست میاد: red، green، یک رشتهٔ خالی (بین دو کامای پشت‌سرهم) و blue.
‌
یعنی parts برابر ['red', 'green', '', 'blue'] می‌شه؛ طولش 4 هست و آخرین عضوش blue.
‌
اشتباه‌های رایج: گزینهٔ «3 blue» یعنی فکر کنیم رشتهٔ خالی بین دو کاما حذف می‌شه. گزینهٔ «5 blue» هم از شمردن اشتباه میاد؛ تعداد تکه‌ها همیشه یکی بیشتر از تعداد جداکننده‌هاست.
‌
نکته: اگه split رو بدون ورودی صدا بزنید، بر اساس فاصله‌ها می‌بُره و تکه‌های خالی رو حذف می‌کنه؛ ولی با یک جداکنندهٔ مشخص مثل کاما، تکه‌های خالی سر جاشون می‌مونن.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
#خبر #هوش_مصنوعی #مدل_متن‌باز
‌
🚀 مدل Hy4 تنسنت رسماً منتشر شد
📰 خبر کاربردی
‌
تنسنت نسخهٔ کامل Hy4 رو عرضه کرد؛ مدلی که قبلاً به‌صورت پیش‌نمایش (Hy4 preview) منتشر شده بود. تازگی‌هاش اینه: برای اولین بار درک تصویر داره و می‌تونه با خط فرمان و رابط گرافیکی کار کنه (computer use). کانتکستش حدود یک میلیون توکنه و از tool calling و خروجی ساختاریافته پشتیبانی می‌کنه.
‌
تنسنت می‌گه Hy4 جزو مدل‌های متن‌باز برتره. توی نمودار خودش از DeepSeek و GLM جلوئه، ولی توی بیشتر بنچمارک‌ها هنوز پشت Claude Opus 5.5 و GPT 6.1 Sol قرار داره. وزن‌های مدل هنوز منتشر نشده؛ تنسنت می‌گه «در چند روز آینده» همراه سیستم‌کارت میاد (نسخهٔ preview از قبل متن‌بازه).
‌
🛠 برای استفاده از API، مدل رو با این شناسه توی OpenRouter پیدا می‌کنید:
‌
tencent/hy4

‌
💰 قیمت رسمی حدود ۰٫۹۰ دلار برای هر میلیون توکنِ ورودی و ۲٫۷۰ دلار برای خروجیه. OpenRouter فعلاً با ۵۰٪ تخفیف عرضه‌اش کرده (حدود ۰٫۴۲ و ۱٫۲۵ دلار) و مدت این تخفیف مشخص نیست. WorkBuddy و CodeBuddy هم تا ۲۴ آبان رایگان هستن.
‌
اعلام رسمی تنسنت
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2
#آموزش #لینوکس
‌
⚡️می‌دونستین با find می‌شه فایل‌ها رو بر اساس اسم، حجم یا تاریخ تغییر پیدا کرد؟
‌
دستور find از پوشه‌ای که بهش می‌دید شروع می‌کنه و همهٔ زیرپوشه‌ها رو هم می‌گرده. مثلاً همهٔ فایل‌های لاگ پروژه:
‌
find . -name "*.log"

‌
خروجی:
‌
./logs/old.log
./logs/big.log
./logs/app.log

‌
نقطه یعنی «از همین پوشه». الگو رو حتماً توی کوتیشن بذارید تا شل خودش ستاره رو باز نکنه. ترتیب خروجی ممکنه روی سیستم شما فرق کنه.
‌
✔️پیدا کردن فایل‌های حجیم
گزینهٔ -type f یعنی فقط فایل (نه پوشه) و -size +1M یعنی بزرگ‌تر از ۱ مگابایت:
‌
find . -type f -size +1M

‌
خروجی:
‌
./logs/big.log

‌
به‌جای M می‌تونید k (کیلوبایت) یا G (گیگابایت) هم بنویسید. برای دیدن حجم هر فایل، du رو به آخر دستور اضافه کنید:
‌
find . -type f -size +1M -exec du -h {} +

‌
خروجی:
‌
2.0M ./logs/big.log

‌
💎فایل‌های قدیمی با ‎-mtime
گزینهٔ -mtime +7 یعنی فایل‌هایی که بیشتر از ۷ روزه تغییر نکردن (به‌خاطر گرد شدن روزها، عملاً ۸ روز و بیشتر) و -mtime -1 یعنی فایل‌هایی که توی ۲۴ ساعت گذشته تغییر کردن:
‌
find . -name "*.log" -mtime +7

‌
خروجی:
‌
./logs/old.log

‌
این‌جا old.log ده روز پیش تغییر کرده و بقیهٔ فایل‌ها همین الان ساخته شدن.
‌
⚠️قبل از ‎-delete حتماً لیست رو ببینید
اول دستور رو بدون -delete اجرا کنید و وقتی لیست درست بود، -delete رو به آخرش اضافه کنید:
‌
find . -name "*.log" -mtime +7 -delete
find . -name "*.log"

‌
خروجی:
‌
./logs/big.log
./logs/app.log

‌
فقط old.log پاک شد. طبق مستندات find، اگه ‎-delete رو اول دستور بنویسید، find سعی می‌کنه همه‌چیزِ زیر پوشهٔ شروع رو پاک کنه؛ پس جاش همیشه آخر دستوره.
‌
▫️ برای جست‌وجو بدون حساسیت به حروف بزرگ و کوچک، به‌جای ‎-name از ‎-iname استفاده کنید:
‌
find src -iname "*.py"

‌
خروجی:
‌
src/Utils.PY
src/main.py

‌
▫️ برای امتحان، این پوشهٔ نمونه رو بسازید و دستورهای بالا رو همون‌جا اجرا کنید:
‌
mkdir -p demo/logs demo/src
cd demo
echo "error" > logs/app.log
echo "ok" > logs/old.log
touch -d "10 days ago" logs/old.log
head -c 2M /dev/zero > logs/big.log
echo "print(1)" > src/main.py
echo "print(2)" > src/Utils.PY

‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
#کوئیز #پایتون ‌ پیش‌نیاز: تعریف تابع با پارامتر ستاره‌دار مثل ‎*args و تابع sum ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. ‌ @codingyar
#پاسخ_کوییز #پایتون
‌
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
‌
✅ جواب درست: «6 0»
‌
وقتی قبل از اسم پارامتر ستاره بذاریم، تابع می‌تونه هر تعداد ورودی بگیره و همه‌شون توی یک تاپل جمع می‌شن. توی total(1, 2, 3) مقدار nums برابر (1, 2, 3) هست و جمعش 6 می‌شه.
‌
توی total() هیچ ورودی‌ای نداریم، پس nums یک تاپل خالی هست. این خطا نیست و sum برای یک تاپل خالی عدد 0 رو برمی‌گردونه.
‌
اشتباه‌های رایج: گزینهٔ «TypeError» یعنی فکر کنیم تابع حتماً ورودی لازم داره؛ با ستاره، صفر ورودی هم مجازه. گزینهٔ «6 None» یعنی فکر کنیم وقتی چیزی برای جمع نیست، None برمی‌گرده. گزینهٔ «(1, 2, 3) 0» هم sum رو نادیده می‌گیره؛ تاپل فقط داخل تابع ساخته می‌شه و چیزی که برمی‌گرده جمع اعداده.
‌
نکته: اسم args فقط یک قرارداده؛ چیزی که مهمه همون ستارهٔ قبل از اسم پارامتره.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1
#خبر #هوش_مصنوعی #ChatGPT
‌
🎞 ChatGPT حالا GIF متحرک می‌سازه؛ Images 2.6 منتشر شد
✨ قابلیت جدید
‌
اوپن‌ای‌آی نسخهٔ Images 2.6 رو برای ChatGPT، Codex و API عرضه کرد. توی ChatGPT و Codex برای همهٔ اشتراک‌ها روی وب، دسکتاپ و موبایل در دسترسه.
‌
🔹 خروجی GIF: از یک پرامپت یا یک عکس، GIF متحرک می‌گیرید و می‌تونید سرعتش رو تنظیم یا فریم‌ها رو جداگانه ویرایش کنید.
🔹 عکس مرجع: عکس خودتون، حیوان خونگی یا شخصیت‌هاتون رو ذخیره کنید تا برای ساخت‌های بعدی لازم نباشه دوباره آپلودشون کنید.
🔹 سرعت: تولید تصویر حدود ۵۰٪ سریع‌تر شده.
‌
👨‍💻 برای توسعه‌دهنده‌ها دو مدل تازه توی API اومده:
• GPT-Image-2.6 Flare: با کیفیت پایین تصویر رو توی حدود ۶ ثانیه می‌سازه.
• GPT-Image-2.6 Sunburst: کیفیت بالاتر و ثبات بیشتر بین ویرایش‌های پشت‌سرهم (با کیفیت medium یا high).
‌
توی API حالا علامت‌گذاری روی تصویر (image markup) برای نشون دادن محل دقیق تغییر، خروجی SVG و پارامتر complexity هم هست. برای بیشتر ویرایش‌ها پیشنهاد اوپن‌ای‌آی complexity پایینه؛ برای صحنه‌های شلوغ سراغ medium یا high برید. توی Codex هم ویرایش تصویر مستقیم داخل نمایش انجام می‌شه.
‌
اعلام رسمی OpenAI
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2
#آموزش #جنگو
‌
⚡️ می‌دونستین چند شرط داخل filter همیشه با AND ترکیب می‌شن و برای OR باید از Q استفاده کنید؟
‌
فرض کنید مدل Product با فیلدهای name، price و category چهار محصول داره: Book (120، books)، Pen (15، office)، Bag (300، bags) و Lamp (80، home). محصول‌هایی رو می‌خوایم که یا ارزون‌تر از 50 باشن، یا توی دستهٔ books:
‌
from django.db.models import Q

result = Product.objects.filter(
Q(price__lt=50) | Q(category="books")
).order_by("name")
print([p.name for p in result])

‌
خروجی:
‌
['Book', 'Pen']

‌
هر Q یک شرط رو نگه می‌داره و علامت | دو شرط رو با OR ترکیب می‌کنه؛ Pen به‌خاطر قیمتش اومد و Book به‌خاطر دسته‌اش.
‌
✔️ حالت پیش‌فرض: AND
وقتی چند شرط رو با کاما داخل filter می‌نویسید، همه‌شون باید با هم برقرار باشن:
‌
result = Product.objects.filter(
price__lt=200, category="books"
)
print([p.name for p in result])

‌
خروجی:
‌
['Book']

‌
همین رو با علامت & بین دو Q هم می‌شه نوشت؛ ولی وقتی فقط AND لازم دارید، همون کاما خواناتره.
‌
❌ برعکس کردن شرط با ~Q
علامت ~ شرط رو برعکس (NOT) می‌کنه؛ مثلاً همهٔ محصول‌ها به‌جز دستهٔ books:
‌
from django.db.models import Q

result = Product.objects.filter(
~Q(category="books")
).order_by("name")
print([p.name for p in result])

‌
خروجی:
‌
['Bag', 'Lamp', 'Pen']

‌
⚠️ترتیب Q و شرط‌های معمولی مهمه
می‌تونید Q و شرط‌های معمولی (مثل category=...) رو با هم بیارید، ولی طبق مستندات جنگو Q باید اول بیاد؛ وگرنه پایتون همون اول خطای سینتکس می‌ده:
‌
from django.db.models import Q

result = Product.objects.filter(
category="books", Q(price__lt=50)
)

‌
خروجی:
‌
SyntaxError: positional argument follows keyword argument

‌
شکل درستش این‌طوریه (قیمت کمتر از 50 یا بیشتر از 200، و هم‌زمان دستهٔ office):
‌
from django.db.models import Q

result = Product.objects.filter(
Q(price__lt=50) | Q(price__gt=200), category="office"
)
print([p.name for p in result])

‌
خروجی:
‌
['Pen']

‌
▫️ یک Q خالی هیچ شرطی نداره؛ برای همین می‌شه از اون شروع کرد و توی حلقه شرط اضافه کرد (مثلاً برای فرم جست‌وجو):
‌
from django.db.models import Q

query = Q()
for word in ["Book", "Lamp"]:
query |= Q(name=word)
result = Product.objects.filter(query).order_by("name")
print([p.name for p in result])

‌
خروجی:
‌
['Book', 'Lamp']

‌
▫️ برای دیدن SQL ساخته‌شده، print(result.query) بزنید؛ برای مثال اول، جنگو یک WHERE با OR بین دو شرط می‌سازه.
‌
▫️ همهٔ این مثال‌ها یک QuerySet برمی‌گردونن، پس می‌شه بعدش order_by یا هر فیلتر دیگه‌ای هم اضافه کرد.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
#کوئیز #پایتون ‌ پیش‌نیاز: تعریف کلاس با __init__ و متد __str__ ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. ‌ @codingyar
#پاسخ_کوییز #پایتون
‌
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
‌
✅ جواب درست: «(2, 3)»
‌
تابع print هر شیء رو اول با str به رشته تبدیل می‌کنه و str هم سراغ متد str کلاس می‌ره. کلاس Point این متد رو تعریف کرده و با f-string رشتهٔ (2, 3) رو برمی‌گردونه؛ پس همین چاپ می‌شه.
‌
اشتباه‌های رایج: گزینهٔ «<__main__.Point object>» شبیه خروجی پیش‌فرض شیئیه که str نداره؛ ولی این‌جا str تعریف شده. گزینهٔ «Point(2, 3)» شبیه کدیه که شیء رو باهاش ساختیم، نه چیزی که str برمی‌گردونه. گزینهٔ «2 3» هم یعنی فکر کنیم print ویژگی‌ها رو جدا جدا چاپ می‌کنه.
‌
نکته: اگه str رو حذف کنید، print چیزی شبیه <__main__.Point object at 0x...> با یک آدرس حافظه نشون می‌ده؛ برای همین تعریف str برای دیباگ و لاگ خیلی به کار میاد.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1
#خبر #هوش_مصنوعی #OpenAI
‌
🚀 مدل GPT-6 Cyber اوپن‌ای‌آی منتشر شد
📰 خبر کاربردی
‌
اوپن‌ای‌آی مدل تخصصی GPT-6 Cyber رو برای پژوهش امنیت سایبری معرفی کرد؛ مدلی که آسیب‌پذیری قابل‌سوءاستفاده رو پیدا و تأیید می‌کنه و داخل محدودهٔ تعیین‌شده توسط پژوهشگر می‌مونه.
‌
🔹 روی ExploitGym حدود ۵۱٪ پیشرفت نسبی نسبت به GPT-5.6 Cyber (۴۸٫۵٪ در برابر ۳۲٫۱٪).
🔹 هم‌ترازی: بدون پرامپت استقرار در ۹۹٫۹۳٪ و با پرامپت در ۱۰۰٪ موارد از سرویس‌های خارج از محدوده دوری کرده.
🔹 در عمل: ۸۱ آسیب‌پذیری ناشناخته با شدت بالا در فایرفاکس؛ ۹۴۸ اکسپلویت عملی برای هستهٔ لینوکس؛ موزیلا بسیاری از موارد فایرفاکس را وصله کرده.
‌
دسترسی فعلاً برای مشتریان منتخب Daybreak Red از طریق API و Codex است و به‌تدریج گسترش می‌یابد. سطح آمادگی سایبری مدل Critical اعلام شده.
‌
معرفی رسمی OpenAI
‌
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1🔥1