هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
2.66K subscribers
21 photos
14 videos
5 files
82 links
Download Telegram
#خبر #هوش_مصنوعی #Cursor #امنیت

⚠️ نسخهٔ آلوده افزونهٔ Claude Code در مارکت‌پلیس Cursor پیدا شد

شرکت Cursor اعلام کرد یک نسخهٔ دستکاری‌شده از افزونهٔ Claude Code (نسخهٔ 2.1.313) چند ساعت در مارکت‌پلیس افزونه‌های Cursor در دسترس بوده. این نسخه رو Anthropic نساخته بود و سعی می‌کرد اطلاعات سیستم رو جمع کنه و یک درِ پشتی SSH روی سیستم نصب کنه. طبق اعلام Cursor حداکثر ۵۰۰۰ کاربر درگیر شدن.

مارکت‌پلیس موقتاً از دسترس خارج شد و حالا دوباره برگشته. اگه روز ۲۹ اکتبر این افزونه رو در Cursor نصب یا آپدیت کردید، افزونه رو به نسخهٔ 2.1.314 به‌روز کنید و مراحل بررسی و پاک‌سازی رو از اطلاعیهٔ رسمی دنبال کنید.

🔗 اطلاعیهٔ امنیتی Cursor رو اینجا بخونید
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1
#خبر #هوش_مصنوعی #Gemini

🎭 حالا می‌تونید در Gemini آواتار شخصی خودتون رو بسازید

قابلیت تازه‌ای به اپ Gemini اضافه شد که باهاش می‌تونید آواتار خودتون رو بسازید و توی عکس‌ها و ویدیوهای ساخته‌شده با هوش مصنوعی حضور داشته باشید.

می‌تونید آواتارتون رو با دوستاتون به اشتراک بذارید، همدیگه رو توی پرامپت‌ها تگ کنید و چهره و صدای شخصیت‌ها در همهٔ تصاویر و ویدیوها ثابت بمونه. دسترسی دیگران به آواتارتون هم هر وقت بخواید قابل حذفه.

🔗 راهنمای رسمی ساخت آواتار رو اینجا ببینید
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1👏1
#خبر #هوش_مصنوعی #Claude
‌
✨ اسم پلن‌های Max در Claude عوض شد و محدودیت ۵ ساعته از پلن Ultra برداشته شد
‌
شرکت Anthropic اعلام کرد پلن Max 5x از این به بعد «Max» و پلن Max 20x «Ultra» نام دارد. قیمت‌ها تغییری نکرده: Max ماهی ۱۰۰ دلار و Ultra ماهی ۲۰۰ دلار. مشترک‌های فعلی لازم نیست کاری انجام دهند.
‌
خبر مهم‌تر برای کاربران Claude Code: محدودیت ۵ ساعته برای حساب‌های تأییدشده Ultra حذف شد و از امروز برای بیشتر مشترک‌های فعلی فعال است. حساب‌های جدیدتر تا زمان تأیید، یک محدودیت موقت دارند و بعد از برداشته شدن آن ایمیل می‌گیرند. محدودیت‌های هفتگی همان قبلی است.
‌
🔗 صفحه پلن‌های Claude را اینجا ببینید
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1
#خبر #هوش_مصنوعی #OpenAI
‌
🛠 چند قابلیت تازه به Agents API اوپن‌ای‌آی اضافه شد
‌
اوپن‌ای‌آی این هفته چند به‌روزرسانی برای Agents API منتشر کرد؛ همان API که هارنس Codex را به‌صورت مدیریت‌شده در اختیار اپلیکیشن شما می‌گذارد:
‌
🔹 بازبینی خودکار: مثل Codex، دستورها قبل از اجرا از نظر رفتار خطرناک بررسی می‌شوند.
🔹 فشرده‌سازی ناهمگام: خلاصه‌سازی کانتکست در پس‌زمینه انجام می‌شود تا سشن‌ها سریع‌تر جلو بروند.
🔹 درک گذر زمان (آزمایشی): مدل گذر زمان را حس می‌کند و درخواستی مثل «حداکثر ۱۰ دقیقه روی رفع CI وقت بگذار» را بهتر انجام می‌دهد.
🔹 تغییر ابزارها: حالا ابزارهای یک سشن را هر زمان می‌شود به‌روز کرد.
🔹 کش بهتر پرامپت: پرامپت سیستمی خودکار بین همه سشن‌ها کش می‌شود و هزینه و زمان کمتری می‌گیرد.
‌
📖 راهنمای Agents API را اینجا بخوانید
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1
#آموزش #پایتون
‌
⚡️ می‌دونستین با یک دکوراتور می‌شه کاری کرد که پایتون جواب یک تابع رو یادش بمونه و برای ورودی تکراری دوباره حسابش نکنه؟
‌
دکوراتور @cache از ماژول استاندارد functools (بدون نصب) نتیجهٔ هر ورودی رو نگه می‌داره؛ دفعهٔ بعد با همون ورودی، بدنهٔ تابع اصلاً اجرا نمی‌شه:
‌
from functools import cache

@cache
def square(n):
print("computing", n)
return n * n

print(square(4))
print(square(4))
print(square.cache_info())

‌
خروجی:
‌
computing 4
16
16
CacheInfo(hits=1, misses=1, maxsize=None, currsize=1)

‌
عبارت «computing» فقط یک بار چاپ شد و صدا زدن دوم مستقیم از کش جواب گرفت. متد cache_info هم نشون می‌ده چند بار از کش جواب داده (hits) و چند بار واقعاً حساب کرده (misses).
‌
✔️ جادوی کش توی تابع بازگشتی
فیبوناچی بازگشتیِ معمولی برای محاسبهٔ fib(30) خودش رو ۲٬۶۹۲٬۵۳۷ بار صدا می‌زنه (با گذاشتن یک شمارنده توی تابع شمرده شده). با @cache هر n فقط یک بار حساب می‌شه:
‌
from functools import cache

@cache
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

print(fib(30))
print(fib.cache_info())

‌
خروجی:
‌
832040
CacheInfo(hits=28, misses=31, maxsize=None, currsize=31)

‌
یعنی بدنهٔ تابع به‌جای چند میلیون بار، فقط ۳۱ بار اجرا شد.
‌
💎 کش با سقف حافظه: lru_cache
کش @cache سقف نداره و با ورودی‌های جدید مدام بزرگ‌تر می‌شه. برای برنامه‌هایی که مدت طولانی روشن می‌مونن (مثل سرور)، @lru_cache با maxsize بهتره: وقتی پر شد، نتیجه‌ای رو که از همه دیرتر استفاده شده بیرون می‌ندازه:
‌
from functools import lru_cache

@lru_cache(maxsize=2)
def double(n):
print("computing", n)
return n * 2

double(1)
double(2)
double(3)
double(1)
print(double.cache_info())

‌
خروجی:
‌
computing 1
computing 2
computing 3
computing 1
CacheInfo(hits=0, misses=4, maxsize=2, currsize=2)

‌
با سقف ۲، وقتی نتیجهٔ 3 اضافه شد، نتیجهٔ 1 از کش بیرون رفت؛ برای همین 1 دوباره حساب شد. اگه سقف رو مشخص نکنید، پیش‌فرضش ۱۲۸ هست.
‌
⚠️ ورودی‌ها باید hashable باشن
کش پشت صحنه یک دیکشنریه، پس آرگومان‌ها باید hashable باشن؛ تاپل مشکلی نداره ولی لیست خطا می‌ده:
‌
from functools import cache

@cache
def total(items):
return sum(items)

print(total((1, 2, 3)))
print(total([1, 2, 3]))

‌
خروجی (خط آخر خطا):
‌
6
TypeError: unhashable type: 'list'

‌
▫️ فقط تابعی رو کش کنید که با ورودی یکسان همیشه همون خروجی رو می‌ده. تابعی که به زمان، عدد تصادفی یا داده‌ای که عوض می‌شه (مثلاً دیتابیس) وابسته‌ست، با کش جواب قدیمی برمی‌گردونه.
‌
▫️ برای خالی کردن کش، متد cache_clear رو صدا بزنید:
‌
from functools import cache

@cache
def square(n):
return n * n

square(4)
square.cache_clear()
print(square.cache_info())

‌
خروجی:
‌
CacheInfo(hits=0, misses=0, maxsize=None, currsize=0)

‌
▫️ برای ویژگی‌ای از کلاس که محاسبه‌ش سنگینه و فقط یک بار لازمه، cached_property از همین ماژول هست.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
#خبر #هوش_مصنوعی #ChatGPT

🔄 حالا می‌تونید توی ChatGPT بین دو اکانت جابه‌جا بشید

قابلیت جابه‌جایی بین اکانت‌ها به ChatGPT اضافه شد. می‌تونید هم‌زمان با دو اکانت وارد بمونید و بدون خروج، بین‌شون سوییچ کنید. این قابلیت روی وب فعاله و روی اپ iOS و اندروید هم کم‌کم در حال عرضه‌ست.

چت‌ها، حافظه، فایل‌ها و اشتراک هر اکانت جدا می‌مونه و پلن پولی با سوییچ کردن به اکانت دیگه منتقل نمی‌شه. برای اضافه کردن اکانت دوم، روی وب از منوی حساب گزینهٔ Add account و توی موبایل از تنظیمات گزینهٔ Switch account رو بزنید.

🔗 راهنمای رسمی OpenAI رو اینجا بخونید
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤3
#خبر #هوش_مصنوعی #Gemini

💎 کلی قابلیت تازه به Gemini اضافه شد

گوگل توی به‌روزرسانی جدید «Gemini Drops» این قابلیت‌ها رو به اپ Gemini آورد:

▫️ مدل Gemini 4 Argon برای کارهای پیچیده مثل ساخت وب‌اپ، فایل سه‌بعدی، اسلاید و گزارش
▫️ اتصال Antigravity به اپ مک، برای رفتن مستقیم از چت به محیط کدنویسی محلی
▫️ اپ Gemini برای ویندوز که با یه میان‌بر کیبورد باز می‌شه
▫️ قابلیت Skills برای ذخیرهٔ دستورهای پرتکرار و اجرای دوباره‌شون
▫️ مدل موسیقی Lyria 3.5 با انتخاب ژانر، طول آهنگ و حالت باکلام یا بی‌کلام
▫️ اتصال Gemini Notebook و اپ‌هایی مثل Adobe و Strava به چت

🔗 معرفی رسمی Gemini رو اینجا ببینید
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤4
#خبر #هوش_مصنوعی #Gemini
📚 صدها کتاب درسی رایگان به Gemini Notebook اضافه شد
گوگل قابلیت تازه‌ای به اسم Textbooks رو به Gemini Notebook (همون NotebookLM سابق) اضافه کرده. حالا می‌تونید صدها کتاب درسی رایگان از ناشرهایی مثل OpenStax و Open Textbook Library رو مستقیم به نوت‌بوک‌تون اضافه کنید.
بعد از اضافه کردن کتاب، جواب سؤال‌ها فقط بر اساس همون کتاب و با ارجاع به صفحه‌هاش داده می‌شه و می‌تونید ازش خلاصه درسی، آزمون و فلش‌کارت بسازید. کافیه توی نوت‌بوک گزینهٔ Add sources و بعد Textbooks رو بزنید. این قابلیت فعلاً برای کاربران آمریکا و هند فعاله.
🔗 اطلاعیهٔ رسمی گوگل رو اینجا بخونید
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1👍1
#آموزش #جنگو
‌
⚡️
فقط اسم محصول‌ها رو از دیتابیس لازم دارین؟ لازم نیست جنگو کل آبجکت‌ها رو بسازه!
‌
متد values_list با flat=True فقط همون یک ستون رو از دیتابیس می‌خونه و به‌جای آبجکت‌های مدل، خودِ مقدارها رو برمی‌گردونه. فرض کنید مدل Product با فیلدهای name و price داریم و سه محصول Book (120)، Pen (15) و Bag (300) توی دیتابیس هست:
‌
qs = Product.objects.order_by("price")
names = qs.values_list("name", flat=True)
print(list(names))

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

‌
نتیجه یک لیست معمولی پایتونه از اسم‌ها، مرتب‌شده بر اساس قیمت؛ آماده برای حلقه، ساختن فایل CSV یا فرستادن توی پاسخ API.✔️
پشت صحنه: فقط همون ستون خونده می‌شه
با چاپ کردن query می‌شه SQL ساخته‌شده رو دید:
‌
qs = Product.objects.order_by("price")
names = qs.values_list("name", flat=True)
print(names.query)

‌
خروجی:
‌
SELECT "shop_product"."name" AS "name" FROM "shop_product" ORDER BY "shop_product"."price" ASC

‌
توی SELECT فقط ستون name اومده. طبق مستندات جنگو، وقتی فقط چند فیلد لازم دارید و به امکانات آبجکت مدل نیازی نیست، گرفتن همون فیلدها بهینه‌تره؛ مخصوصاً برای جدول‌هایی با ستون‌های زیاد یا متن‌های بلند.💎
چند ستون: تاپل، namedtuple یا دیکشنری
اگه چند فیلد بدید، هر ردیف یک تاپل می‌شه. با named=True تاپل اسم‌دار (namedtuple) می‌گیرید و متد values هم هر ردیف رو به شکل دیکشنری برمی‌گردونه:
‌
qs = Product.objects.order_by("price")
print(list(qs.values_list("name", "price")))
print(qs.values_list("name", "price", named=True)[0])
print(qs.values("name", "price")[0])

‌
خروجی:
‌
[('Pen', 15), ('Book', 120), ('Bag', 300)]
Row(name='Pen', price=15)
{'name': 'Pen', 'price': 15}

⚠️
پارامتر flat فقط با یک فیلد
اگه flat=True رو با بیشتر از یک فیلد بدید، جنگو خطا می‌ده:
‌
Product.objects.values_list("name", "price", flat=True)

‌
خروجی (خط آخر خطا):
‌
TypeError: 'flat' is not valid when values_list is called with more than one field.

‌
▫️ برای گرفتن یک مقدار از یک ردیف خاص، بعدش get رو صدا بزنید:
‌
qs = Product.objects.values_list("price", flat=True)
print(qs.get(name="Book"))

‌
خروجی:
‌
120

‌
▫️ چیزی که برمی‌گرده آبجکت مدل نیست؛ پس متدهای مدل و save روی این مقدارها کار نمی‌کنن. هر جا آبجکت کامل لازم دارید، همون کوئری معمولی رو بنویسید.
‌
▫️ نتیجه هنوز یک QuerySet تنبله (lazy)؛ یعنی تا وقتی ازش استفاده نکنید (مثلاً با list یا یک حلقه) کوئری‌ای به دیتابیس نمی‌ره و می‌شه قبلش filter و order_by هم بهش زد.
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
‌
‌
‌
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
#کوئیز #پایتون ‌ پیش‌نیاز: برش (slicing) لیست، گام و اندیس منفی ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. ‌ @codingyar
#پاسخ_کوییز #پایتون
‌
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
‌
✅ جواب درست: «[10, 30, 50] [40, 50]»
‌
برش لیست سه بخش داره: شروع، پایان و گام (start:stop:step). هر بخشی که خالی بمونه مقدار پیش‌فرضش رو می‌گیره: شروع از اول لیست، پایان تا آخر لیست و گام برابر ۱. عضوِ اندیسِ پایان هم هیچ‌وقت توی نتیجه نمیاد.
‌
توی خط دوم، [::2] یعنی از اول تا آخر با گام ۲؛ پس اندیس‌های 0 و 2 و 4 برداشته می‌شن و step برابر [10, 30, 50] می‌شه.
‌
توی خط سوم، اندیس منفی از آخر لیست می‌شمره: ‎-1 عضو آخره (50) و ‎-2 عضو یکی مونده به آخر (40). برش [-2:] از 40 شروع می‌شه و تا انتها می‌ره؛ پس last برابر [40, 50] می‌شه.
‌
اشتباه رایج: گزینهٔ «[20, 40] [40, 50]» یعنی فکر کنیم گام ۲ از عضو دوم شروع می‌شه؛ این نتیجهٔ برش [1::2] هست. گزینهٔ «[10, 30, 50] [50]» یعنی [-2:] رو با [-1:] قاطی کنیم. گزینهٔ «[10, 30] [40]» هم یعنی فکر کنیم عضو آخر لیست توی برش‌هایی که پایانشون خالیه نمیاد، در حالی که پایانِ خالی یعنی تا آخرِ لیست
‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2
⚡️#آموزش #SQL
‌
می‌دونستین COUNT(*) و COUNT(email) روی یک جدول ممکنه دو عدد متفاوت بدن؟
‌
تابع COUNT(*) همهٔ ردیف‌ها رو می‌شمره، ولی COUNT(email) فقط ردیف‌هایی رو می‌شمره که email اون‌ها NULL نباشه. فرض کنید جدول users با ستون‌های name، city و email چهار کاربر داره و ایمیل یکی‌شون (Sara) خالیه، یعنی NULL:
‌
SELECT COUNT(*) AS all_rows,
COUNT(email) AS with_email
FROM users;

‌
خروجی (توی SQLite):
‌
all_rows  with_email
-------- ----------
4 3

‌
پس برای «تعداد کل کاربرها» از COUNT(*) استفاده کنید؛ COUNT(email) یعنی «تعداد کاربرهایی که ایمیل دارن». اگه این دو تا قاطی بشن، عددهای گزارش و داشبورد بی‌صدا غلط درمیان.
‌
✔️ شمردن مقدارهای یکتا با DISTINCT
با COUNT(DISTINCT city) هر مقدار فقط یک بار شمرده می‌شه (اونم باز بدون NULLها):
‌
SELECT COUNT(city) AS cities,
COUNT(DISTINCT city) AS unique_cities
FROM users;

‌
خروجی:
‌
cities  unique_cities
------ -------------
4 3

‌
دو نفر از Tehran هستن، پس از چهار شهر ثبت‌شده فقط سه شهر متفاوت داریم.
‌
💎 شمارش برای هر گروه با GROUP BY
همین قانون توی گروه‌بندی هم برقراره؛ مثلاً تعداد کاربرهای ایمیل‌دار هر شهر:
‌
SELECT city, COUNT(email) AS with_email
FROM users
GROUP BY city
ORDER BY city;

‌
خروجی:
‌
city   with_email
------ ----------
Shiraz 0
Tabriz 1
Tehran 2

‌
برای Shiraz عدد 0 اومده، چون تنها کاربرش ایمیل نداره؛ اگه COUNT(*) می‌نوشتیم، 1 می‌گرفتیم.
‌
⚠️ برای پیدا کردن NULL از = استفاده نکنید
مقایسهٔ هر چیزی با NULL (حتی خودِ NULL) نتیجه‌اش «نامعلومه»، نه درست؛ پس = NULL هیچ ردیفی رو پیدا نمی‌کنه و باید IS NULL بنویسید:
‌
SELECT COUNT(*) AS wrong FROM users WHERE email = NULL;
SELECT COUNT(*) AS correct FROM users WHERE email IS NULL;

‌
خروجی:
‌
wrong
-----
0
correct
-------
1

‌
▫️ توابع SUM و AVG هم NULLها رو نادیده می‌گیرن؛ مثلاً میانگین 10، 20 و NULL می‌شه 15، نه 10.
‌
▫️ این رفتار مخصوص SQLite نیست؛ طبق مستندات PostgreSQL و MySQL هم COUNT(*) همهٔ ردیف‌ها رو می‌شمره و COUNT(ستون) فقط مقدارهای غیر NULL رو. فقط ظاهر خروجی توی هر ابزار فرق داره.
‌
▫️ برای امتحان، sqlite3 رو با نمایش جدولی باز کنید:
‌
sqlite3 -header -column test.db

‌
بعد جدول نمونه رو بسازید و کوئری‌های بالا رو اجرا کنید:
‌
CREATE TABLE users (name TEXT, city TEXT, email TEXT);
INSERT INTO users VALUES
('Ali', 'Tehran', 'ali@example.com'),
('Sara', 'Shiraz', NULL),
('Reza', 'Tehran', 'reza@example.com'),
('Mina', 'Tabriz', 'mina@example.com');

‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
هوش‌مصنوعی🔥برنامه‌نویسی | کدینگ‌یار
#کوئیز #پایتون ‌ پیش‌نیاز: عملگرهای or و and، مقدارهای truthy و falsy ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. ‌ @codingyar
#پاسخ_کوییز #پایتون
‌
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
‌
✅ جواب درست: «guest 0»
‌
عملگرهای or و and توی پایتون لزوماً True یا False برنمی‌گردونن؛ همیشه یکی از خودِ دو مقدار رو برمی‌گردونن. مقدارهایی مثل رشتهٔ خالی، عدد 0، لیست خالی و None «falsy» حساب می‌شن و بقیه «truthy».
‌
عملگر or از چپ شروع می‌کنه و اولین مقدار truthy رو برمی‌گردونه (اگه هیچ‌کدوم truthy نباشه، مقدار آخر رو). چون name رشتهٔ خالیه و falsy حساب می‌شه، نتیجه مقدار دوم یعنی "guest" می‌شه و user برابر guest هست.
‌
عملگر and برعکس عمل می‌کنه: اولین مقدار falsy رو برمی‌گردونه (اگه همه truthy باشن، مقدار آخر رو). چون count برابر 0 و falsy هست، پایتون همون‌جا متوقف می‌شه و اصلاً به 10 نمی‌رسه؛ پس result خودِ عدد 0 می‌شه.
‌
اشتباه رایج: گزینهٔ «guest False» یعنی فکر کنیم and همیشه True یا False برمی‌گردونه، در حالی که خودِ مقدار falsy یعنی 0 برمی‌گرده. گزینهٔ «True False» یعنی همین فکر رو برای هر دو عملگر بکنیم. گزینهٔ «guest 10» یعنی فکر کنیم and هم مثل or دنبال مقدار truthy می‌گرده و از 0 رد می‌شه.
‌
این رفتار برای مقدار پیش‌فرض خیلی کاربردیه (مثل name or "guest")، فقط حواستون باشه که 0 و لیست خالی هم falsy هستن و با این روش جایگزین می‌شن.

‌
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
#خبر #هوش_مصنوعی #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