❤19
✔️ تابع getattr در پایتون
گاهی اوقات لازم داریم به یک ویژگی (Attribute) یا متد (Method) از یک شیء دسترسی پیدا کنیم، بدون اینکه اسم آن را مستقیم در کد بنویسیم. اینجا تابع getattr به کمک ما میآید.
ساختار کلی:
مثال ساده:
+ اگر ویژگی یا متد وجود داشته باشد، مقدارش برمیگردد.
+ اگر وجود نداشته باشد و default تعریف کرده باشیم، همان مقدار برمیگردد.
+ اگر default تعریف نشده باشد و ویژگی وجود نداشته باشد → خطای AttributeError رخ میدهد.
@kaliboys | کالی بویز
گاهی اوقات لازم داریم به یک ویژگی (Attribute) یا متد (Method) از یک شیء دسترسی پیدا کنیم، بدون اینکه اسم آن را مستقیم در کد بنویسیم. اینجا تابع getattr به کمک ما میآید.
ساختار کلی:
getattr(object, name[, default])
object ➝ شیء موردنظر
name ➝ نام ویژگی یا متد (به صورت رشته)
default ➝ (اختیاری) مقداری که اگر ویژگی پیدا نشد، برگردانده میشود
مثال ساده:
class Person:
name = "Ali"
age = 25
p = Person()
print(getattr(p, "name")) # Ali
print(getattr(p, "age")) # 25
print(getattr(p, "city", "Tehran")) # چون city وجود ندارد => Tehran
+ اگر ویژگی یا متد وجود داشته باشد، مقدارش برمیگردد.
+ اگر وجود نداشته باشد و default تعریف کرده باشیم، همان مقدار برمیگردد.
+ اگر default تعریف نشده باشد و ویژگی وجود نداشته باشد → خطای AttributeError رخ میدهد.
@kaliboys | کالی بویز
❤3👍2
✔️ ایندکس شدن سایتهای مدرن در گوگل
قدیما وبسایتها استاتیک بودن. یعنی سرور همون HTML نهایی رو به مرورگر میداد و مرورگر فقط نمایش میداد. پس گوگل راحت همه محتوای صفحه رو میدید و ایندکس میکرد.
اما الان بیشتر وبسایتها به شکل برنامه فرانتاند (SPA) ساخته میشن (مثل React، Vue، Angular). این مدل، یه اسکلت HTML خالی میده به مرورگر و دادهها رو از طریق API میگیره و بعد با جاوااسکریپت صفحه رو میسازه.
خیلیا میترسن که نکنه چون محتوای اصلی با API میاد و HTML اولیه خالیه، گوگل اون محتوا رو نبینه و ایندکس نشه.
گوگل الان جاوااسکریپت رو رندر میکنه و میتونه محتوای API رو ببینه (ولی نه همیشه کامل و سریع).
برای مطمئن شدن، گوگل ابزارهایی داره:
Rich Results Test:
search.google.com/test/rich-results
اینجا میتونی ببینی گوگل بعد از رندر کردن صفحه، دقیقاً چه HTMLی دیده.
Google Search Console → URL Inspection:
این ابزار رسمیتره و HTML رندر شده نهایی رو نشون میده.
@Teachify | برنامه نویسی
قدیما وبسایتها استاتیک بودن. یعنی سرور همون HTML نهایی رو به مرورگر میداد و مرورگر فقط نمایش میداد. پس گوگل راحت همه محتوای صفحه رو میدید و ایندکس میکرد.
اما الان بیشتر وبسایتها به شکل برنامه فرانتاند (SPA) ساخته میشن (مثل React، Vue، Angular). این مدل، یه اسکلت HTML خالی میده به مرورگر و دادهها رو از طریق API میگیره و بعد با جاوااسکریپت صفحه رو میسازه.
خیلیا میترسن که نکنه چون محتوای اصلی با API میاد و HTML اولیه خالیه، گوگل اون محتوا رو نبینه و ایندکس نشه.
گوگل الان جاوااسکریپت رو رندر میکنه و میتونه محتوای API رو ببینه (ولی نه همیشه کامل و سریع).
برای مطمئن شدن، گوگل ابزارهایی داره:
Rich Results Test:
search.google.com/test/rich-results
اینجا میتونی ببینی گوگل بعد از رندر کردن صفحه، دقیقاً چه HTMLی دیده.
Google Search Console → URL Inspection:
این ابزار رسمیتره و HTML رندر شده نهایی رو نشون میده.
@Teachify | برنامه نویسی
❤5👍3
✔️ در دنیای HTTP یک مفهوم مهم داریم به نام Idempotent
یعنی اگر یک درخواست چند بار تکرار شود، نتیجهاش فرقی با اجرای یکباره نکند.
بیایید متدهای پرکاربرد را مرور کنیم:
متد GET: همیشه idempotent (فقط دیتا را میخواند).
متد PUT: هست (هر بار اجرا شود، منبع را به یک حالت خاص میرساند).
متد DELETE: هست (اولین بار حذف میکند، دفعات بعدی اثری ندارد).
متد POST: نیست (هر بار اجرا شود، دادهی جدید میسازد).
متد PATCH: تضمین نشده، چون بسته به طراحی API میتواند هم idempotent باشد، هم نباشد:
مثال غیر idempotent:
دوبار اجرا شود → موجودی دو بار افزایش مییابد.
مثال idempotent:
هر چند بار هم اجرا شود، نتیجه یکی است.
@Teachify | برنامه نویسی
یعنی اگر یک درخواست چند بار تکرار شود، نتیجهاش فرقی با اجرای یکباره نکند.
بیایید متدهای پرکاربرد را مرور کنیم:
متد GET: همیشه idempotent (فقط دیتا را میخواند).
متد PUT: هست (هر بار اجرا شود، منبع را به یک حالت خاص میرساند).
متد DELETE: هست (اولین بار حذف میکند، دفعات بعدی اثری ندارد).
متد POST: نیست (هر بار اجرا شود، دادهی جدید میسازد).
متد PATCH: تضمین نشده، چون بسته به طراحی API میتواند هم idempotent باشد، هم نباشد:
مثال غیر idempotent:
PATCH /user/123 { "balance": "+100" }
دوبار اجرا شود → موجودی دو بار افزایش مییابد.
مثال idempotent:
PATCH /user/123 { "status": "active" }
هر چند بار هم اجرا شود، نتیجه یکی است.
@Teachify | برنامه نویسی
👍4❤1🔥1👏1
در تیمهای موفق، انگیزه افراد تنها از مسیر «اهداف مالی» نمیآید؛ بلکه ریشه در سافتاسکیلها و تجربههای انسانی دارد.
هر نقش، انگیزه خاص خود را میطلبد و اگر رهبر تیم آن را درک کند، سازمان به بهرهوری واقعی میرسد.
👨💻 دولوپر → با «چالش فنی»، «یادگیری» و «اعتماد به انتخاب راهحل» انگیزه میگیرد.
📌 مالک محصول → وقتی «اثرگذاری تصمیمها» و «اعتماد سازمان» را ببیند، بیشترین انرژی را میگذارد.
📊 تحلیلگر → در صورتی که «بهعنوان مترجم بین بیزینس و فنی شنیده شود» و «قدردانی از دقتش» را تجربه کند، به بالاترین سطح عملکرد میرسد.
👥 مدیر تیم → با «اعتماد اعضا» و «موفقیت جمعی» به انگیزهای پایدار دست پیدا میکند.
🎯 حقیقت این است: مدیریت مؤثر یعنی شناخت محرکهای نرم هر نقش.
اگر این سوخت پنهانی را درست بشناسیم، تیمها نهتنها کارآمدتر، بلکه متعهدتر و خلاقتر خواهند بود.
@Teachify | برنامه نویسی
هر نقش، انگیزه خاص خود را میطلبد و اگر رهبر تیم آن را درک کند، سازمان به بهرهوری واقعی میرسد.
👨💻 دولوپر → با «چالش فنی»، «یادگیری» و «اعتماد به انتخاب راهحل» انگیزه میگیرد.
📌 مالک محصول → وقتی «اثرگذاری تصمیمها» و «اعتماد سازمان» را ببیند، بیشترین انرژی را میگذارد.
📊 تحلیلگر → در صورتی که «بهعنوان مترجم بین بیزینس و فنی شنیده شود» و «قدردانی از دقتش» را تجربه کند، به بالاترین سطح عملکرد میرسد.
👥 مدیر تیم → با «اعتماد اعضا» و «موفقیت جمعی» به انگیزهای پایدار دست پیدا میکند.
🎯 حقیقت این است: مدیریت مؤثر یعنی شناخت محرکهای نرم هر نقش.
اگر این سوخت پنهانی را درست بشناسیم، تیمها نهتنها کارآمدتر، بلکه متعهدتر و خلاقتر خواهند بود.
@Teachify | برنامه نویسی
👌4❤1
✔️ تابع isinstance در پایتون
گاهی وقتا لازمه بدونیم یه متغیر از چه کلاسی ساخته شده یا جزو کدوم نوع داده هست. اینجاست که تابع isinstance به کارمون میاد.
ساختار کلی:
مثال ساده:
چند نوع همزمان:
در برنامههای بزرگ وقتی میخوای مطمئن بشی ورودی یا متغیر از نوع درست باشه، خیلی به کارت میاد.
@Teachify | برنامه نویسی
گاهی وقتا لازمه بدونیم یه متغیر از چه کلاسی ساخته شده یا جزو کدوم نوع داده هست. اینجاست که تابع isinstance به کارمون میاد.
ساختار کلی:
isinstance(object, classinfo)
object: شیء مورد نظر
classinfo: کلاسی (یا tuple از چند کلاس) که میخوایم بررسی کنیم
مثال ساده:
x = 5
print(isinstance(x, int)) # True
print(isinstance(x, str)) # False
چند نوع همزمان:
y = [1, 2, 3]
print(isinstance(y, (list, tuple))) # True
در برنامههای بزرگ وقتی میخوای مطمئن بشی ورودی یا متغیر از نوع درست باشه، خیلی به کارت میاد.
@Teachify | برنامه نویسی
❤9
✔️ فرهنگستان میگه به جای منشن بگید نامیاد 😎
یعنی از این به بعد:
🔹 “منو منشن کن” -> “منو نامیاد کن”
🔹 “بچهها رو منشن کردم” _> “بچهها رو نامیاد کردم”
ولی خب…
اگه کسی ندونه، فک میکنه داری خبر فوت میدی 😭😂
@Teachify | برنامه نویسی
یعنی از این به بعد:
🔹 “منو منشن کن” -> “منو نامیاد کن”
🔹 “بچهها رو منشن کردم” _> “بچهها رو نامیاد کردم”
ولی خب…
اگه کسی ندونه، فک میکنه داری خبر فوت میدی 😭😂
@Teachify | برنامه نویسی
🤣14❤1👎1😁1
✔️ تگ جالب <kbd> در HTML
میدونستید توی HTML یه تگ به اسم <kbd> وجود داره؟ با این تگ میتونید دکمههای کیبورد و شورتکاتها رو داخل متن نمایش بدید.
این تگ خیلی به درد آموزشها و مستندات میخوره.
@Teachify | برنامه نویسی
میدونستید توی HTML یه تگ به اسم <kbd> وجود داره؟ با این تگ میتونید دکمههای کیبورد و شورتکاتها رو داخل متن نمایش بدید.
Press <kbd>Ctrl</kbd> + <kbd>S</kbd> to save your file.
این تگ خیلی به درد آموزشها و مستندات میخوره.
@Teachify | برنامه نویسی
👍20❤2❤🔥1
✔️ جنگو ۶ رسید!
جنگو نسخه ۶.۰ (آلفا) منتشر شده و تغییرات بزرگی همراه خودش آورده
چند مورد مهم:
- تسکهای پسزمینه داخلی → دیگه برای کارهای ساده نیازی به Celery نیست
- بهبود پشتیبانی از async: مقیاسپذیری راحتتر
- فرمها و ORM بهتر: کوئریهای تمیزتر و تایپینگ قویتر
- بهبودهای پنل ادمین: امکانات بیشتر برای دولوپرها
- تایپ annotation در همه جا: تجربه بهتر در ویرایشگرها
برای من جذابترین بخش، تسکهای پسزمینه داخلی هست — چون دیگه برای پروژههای کوچک و متوسط، نیاز به نصب و کانفیگ سلری نداریم.
@Teachify | برنامه نویسی
جنگو نسخه ۶.۰ (آلفا) منتشر شده و تغییرات بزرگی همراه خودش آورده
چند مورد مهم:
- تسکهای پسزمینه داخلی → دیگه برای کارهای ساده نیازی به Celery نیست
- بهبود پشتیبانی از async: مقیاسپذیری راحتتر
- فرمها و ORM بهتر: کوئریهای تمیزتر و تایپینگ قویتر
- بهبودهای پنل ادمین: امکانات بیشتر برای دولوپرها
- تایپ annotation در همه جا: تجربه بهتر در ویرایشگرها
برای من جذابترین بخش، تسکهای پسزمینه داخلی هست — چون دیگه برای پروژههای کوچک و متوسط، نیاز به نصب و کانفیگ سلری نداریم.
@Teachify | برنامه نویسی
❤12❤🔥2👍1
✔️ فونت فارسی X به «وزیر» تغییر پیدا کرد!
شبکه اجتماعی X (توییتر سابق) فونت فارسی خودش رو به «وزیر» تغییر داده؛ فونتی که کار یه طراح خلاق ایرانی به اسم صابر راستیکرداره.
یکی از کارمندای ایرانی X گفته این کار رو برای یادبود و احترام به صابر انجام دادن. فونت وزیر بهخاطر سادگی و خوانایی زیادش تو سالای اخیر حسابی محبوب شده بود، و حالا قراره همهی فارسیزبانای X هر روز باهاش تایپ کنن
@Teachify | برنامه نویسی
شبکه اجتماعی X (توییتر سابق) فونت فارسی خودش رو به «وزیر» تغییر داده؛ فونتی که کار یه طراح خلاق ایرانی به اسم صابر راستیکرداره.
یکی از کارمندای ایرانی X گفته این کار رو برای یادبود و احترام به صابر انجام دادن. فونت وزیر بهخاطر سادگی و خوانایی زیادش تو سالای اخیر حسابی محبوب شده بود، و حالا قراره همهی فارسیزبانای X هر روز باهاش تایپ کنن
@Teachify | برنامه نویسی
❤19👍4
✔️میدونستی کدهات توی قطب شمال نگهداری میشن؟!
گیتهاب توی سال ۲۰۲۰ پروژهای به اسم GitHub Arctic Code Vault راه انداخت، هدفش این بود که نسخهای از تمام ریپازیتوریهای عمومی رو برای آیندگان نگه داره — جایی سرد، امن و دور از دسترس: قطب شمال!
دادهها روی فیلمهای دیجیتال مخصوصی ذخیره شدن که تا ۱۰۰۰ سال دوام دارن و در یه معدن متروکه در جزیرهی Svalbard نروژ نگهداری میشن.
و اگه قبل از ۲ فوریه ۲۰۲۰ توی یه ریپازیتوری عمومی مشارکت کرده باشی،
احتمال زیاد اسم و کدهات هم الان اونجان!
(اونایی که این افتخار رو دارن، توی پروفایلشون یه نشان به اسم Arctic Code Vault Contributor دارن)
@Teachify | برنامه نویسی
گیتهاب توی سال ۲۰۲۰ پروژهای به اسم GitHub Arctic Code Vault راه انداخت، هدفش این بود که نسخهای از تمام ریپازیتوریهای عمومی رو برای آیندگان نگه داره — جایی سرد، امن و دور از دسترس: قطب شمال!
دادهها روی فیلمهای دیجیتال مخصوصی ذخیره شدن که تا ۱۰۰۰ سال دوام دارن و در یه معدن متروکه در جزیرهی Svalbard نروژ نگهداری میشن.
و اگه قبل از ۲ فوریه ۲۰۲۰ توی یه ریپازیتوری عمومی مشارکت کرده باشی،
احتمال زیاد اسم و کدهات هم الان اونجان!
(اونایی که این افتخار رو دارن، توی پروفایلشون یه نشان به اسم Arctic Code Vault Contributor دارن)
@Teachify | برنامه نویسی
❤12👍2
✔️ توی پایتون Wrapper چیه؟
گاهی وقتا نمیخوای کد یه تابع رو تغییر بدی،
ولی میخوای قبل یا بعد از اجرای اون تابع کاری انجام بدی، مثلاً زمان اجراش رو بسنجی، لاگ بگیری یا مجوز کاربر رو چک کنی.
اینجاست که Wrapper وارد میشه به این معنی که یه تابع که میاد یه تابع دیگه رو “میپیچه” و یه رفتار جدید بهش اضافه میکنه.
خروجی:
> درواقع Wrapper یه روکش برای تابع اصلیه که بدون تغییر در کد اصلی، یه رفتار جدید بهش اضافه میکنه.
@Teachify | برنامه نویسی
گاهی وقتا نمیخوای کد یه تابع رو تغییر بدی،
ولی میخوای قبل یا بعد از اجرای اون تابع کاری انجام بدی، مثلاً زمان اجراش رو بسنجی، لاگ بگیری یا مجوز کاربر رو چک کنی.
اینجاست که Wrapper وارد میشه به این معنی که یه تابع که میاد یه تابع دیگه رو “میپیچه” و یه رفتار جدید بهش اضافه میکنه.
def wrapper(func):
def inner(*args, **kwargs):
print("🔹 Before execution")
result = func(*args, **kwargs)
print("✅ After execution")
return result
return inner
@wrapper
def say_hello(name):
print(f"Hello {name}!")
say_hello("Pythonista")
خروجی:
🔹 Before execution
Hello Pythonista!
✅ After execution
> درواقع Wrapper یه روکش برای تابع اصلیه که بدون تغییر در کد اصلی، یه رفتار جدید بهش اضافه میکنه.
@Teachify | برنامه نویسی
❤8
✔️ کتابخانه Polars — نسل بعدی پردازش داده در پایتون!
اگر با Pandas کار کردی، حتماً میدونی گاهی موقع کار با دیتاستهای بزرگ، سرعتش کم میشه و RAM رو میبلعه،
اینجاست که Polars وارد میشه!
میشه گفت که Polars یه کتابخانهی فوقسریع برای تحلیل دادهست، نوشتهشده با زبان Rust و طراحیشده برای کار با دادههای حجیم، چندهستهای و سنگین.
چرا Polars بهتر از Pandas عمل میکنه؟
■ چندریسمانی (Multi-threaded): از تمام هستههای CPU استفاده میکنه
■ مبتنی بر Apache Arrow (حافظهی ستونی فوقبهینه)
■ مصرف RAM بسیار کمتر
■ تا ۱۰ تا ۱۰۰ برابر سریعتر از Pandas در بعضی عملیاتها
■ پشتیبانی از حالت Lazy Execution (محاسبه فقط وقتی واقعاً نیاز باشه)
مثال ساده:
کد بالا دقیقاً کاری شبیه Pandas انجام میده، ولی خیلی سریعتر و بهینهتر اجرا میشه!
#Python #Polars #Pandas #DataScience #Rust #FastData
@Teachify | برنامه نویسی
اگر با Pandas کار کردی، حتماً میدونی گاهی موقع کار با دیتاستهای بزرگ، سرعتش کم میشه و RAM رو میبلعه،
اینجاست که Polars وارد میشه!
میشه گفت که Polars یه کتابخانهی فوقسریع برای تحلیل دادهست، نوشتهشده با زبان Rust و طراحیشده برای کار با دادههای حجیم، چندهستهای و سنگین.
چرا Polars بهتر از Pandas عمل میکنه؟
■ چندریسمانی (Multi-threaded): از تمام هستههای CPU استفاده میکنه
■ مبتنی بر Apache Arrow (حافظهی ستونی فوقبهینه)
■ مصرف RAM بسیار کمتر
■ تا ۱۰ تا ۱۰۰ برابر سریعتر از Pandas در بعضی عملیاتها
■ پشتیبانی از حالت Lazy Execution (محاسبه فقط وقتی واقعاً نیاز باشه)
مثال ساده:
import polars as pl
df = pl.read_csv("data.csv")
result = (
df.filter(pl.col("age") > 30)
.select(pl.col("salary").mean())
)
print(result)
کد بالا دقیقاً کاری شبیه Pandas انجام میده، ولی خیلی سریعتر و بهینهتر اجرا میشه!
#Python #Polars #Pandas #DataScience #Rust #FastData
@Teachify | برنامه نویسی
👍5❤1
برنامه نویسی | Teachify
Photo
✔️ ماژول functools و توابع partial و partialmethod
حتماً براتون پیش اومده که بخواین تابعی بسازین که بعضی از آرگومانهاش همیشه مقدار ثابتی دارن، ولی نخوایین هر بار اون مقدارها رو دستی بدین!
اینجاست که دو قهرمان وارد میشن:
functools.partial
functools.partialmethod
■تابع partial
تابع partial یه نسخه جدید از تابع اصلی میسازه که بعضی آرگومانهاش از قبل مقداردهی شدن.
مثال ساده:
اینجا تابع square مثل power(base, 2) عمل میکنه.
در واقع، partial کمک میکنه تا توابع جدیدی بسازیم بدون تکرار کد و با آرگومانهای از پیش تنظیمشده
■تابع partialmethod
اما اگه بخوای این کار رو داخل کلاس انجام بدی، باید از partialmethod استفاده کنی.
مثال:
در اینجا partialmethod مثل partial عمل میکنه ولی مخصوص متدهای کلاس هست.
اون بهصورت خودکار self رو مدیریت میکنه، چیزی که partial در متدها نمیتونه انجام بده.
@Teachify | برنامه نویسی
حتماً براتون پیش اومده که بخواین تابعی بسازین که بعضی از آرگومانهاش همیشه مقدار ثابتی دارن، ولی نخوایین هر بار اون مقدارها رو دستی بدین!
اینجاست که دو قهرمان وارد میشن:
functools.partial
functools.partialmethod
■تابع partial
تابع partial یه نسخه جدید از تابع اصلی میسازه که بعضی آرگومانهاش از قبل مقداردهی شدن.
مثال ساده:
from functools import partial
def power(base, exponent):
return base ** exponent
# ایجاد تابعی که همیشه توان 2 میگیره
square = partial(power, exponent=2)
print(square(5)) # خروجی: 25
اینجا تابع square مثل power(base, 2) عمل میکنه.
در واقع، partial کمک میکنه تا توابع جدیدی بسازیم بدون تکرار کد و با آرگومانهای از پیش تنظیمشده
■تابع partialmethod
اما اگه بخوای این کار رو داخل کلاس انجام بدی، باید از partialmethod استفاده کنی.
مثال:
from functools import partialmethod
class MathOps:
def power(self, base, exponent):
return base ** exponent
square = partialmethod(power, exponent=2)
m = MathOps()
print(m.square(5)) # خروجی: 25
در اینجا partialmethod مثل partial عمل میکنه ولی مخصوص متدهای کلاس هست.
اون بهصورت خودکار self رو مدیریت میکنه، چیزی که partial در متدها نمیتونه انجام بده.
@Teachify | برنامه نویسی
👍3❤2
✔️ پایتون ۳.۱۴ رسید!
نسخهی جدید با کلی تغییر بنیادین اومده:
■ اضافه شدن t-strings برای ساخت رشتههای قالبدار حرفهای
■ پشتیبانی از Free-Threaded Python — اجرای واقعی چندنخی بدون GIL
■ معرفی Subinterpreters برای اجرای موازی سبک و سریع
■ پیغامهای خطای هوشمندتر و راهنمایی خودکار در هنگام دیباگ
■ پوستهی تعاملی جدید با رنگ و تکمیل خودکار
■ ماژول تازهی compression.zstd برای فشردهسازی سریعتر
■ بهبود در مدیریت حافظه و Garbage Collector
جهت مطالعه بیشتر:
realpython.com/python314-new-features
@Teachify | برنامه نویسی
نسخهی جدید با کلی تغییر بنیادین اومده:
■ اضافه شدن t-strings برای ساخت رشتههای قالبدار حرفهای
■ پشتیبانی از Free-Threaded Python — اجرای واقعی چندنخی بدون GIL
■ معرفی Subinterpreters برای اجرای موازی سبک و سریع
■ پیغامهای خطای هوشمندتر و راهنمایی خودکار در هنگام دیباگ
■ پوستهی تعاملی جدید با رنگ و تکمیل خودکار
■ ماژول تازهی compression.zstd برای فشردهسازی سریعتر
■ بهبود در مدیریت حافظه و Garbage Collector
جهت مطالعه بیشتر:
realpython.com/python314-new-features
@Teachify | برنامه نویسی
❤10👍1