Italiano
Apri in Telegram

Post 💠 PEP 750: Template Strings (T-Strings)

20 aprile 2025
|
| کانال توسعه‌دهندگان پایتون |
Link
tocca per mostrare
💠 PEP 750: Template Strings (T-Strings) مدتی میشه که PEP 750 تایید شده و قراره در نسخه 3.14 پیاده بشه. برای اولین بار قراره زمانی که از quotation (") استفاده می‌کنید مقداری از جنس یک built-in type برای شما برگردونده نشه. تا الان string prefix های r, f, u و fr رو در پایتون داشتیم و حالا قراره t و tr رو هم در کد ها (مخصوصا در کد framework ها مشاهده کنید). وجود template string ها در پایتون چیز جدید نیست. string.Template یا formatting در پایتون وجود داشتند و دارند. حتی templating engine هایی مثل jinja یا meko و حتی engine های مختص framework های محبوبی مثل django هم وجود داشتند و میشه گفت این مقوله مفهوم جدیدی به پایتون اضافه نمیکنه. از زمانی که PEP 498 تایید شد و f-string به پایتون 3.6 اومد مقداری مفهوم template ها در کد ها مقداری کمرنگ شدند چون عمده نیازی که وجود داشت برای جایگذاری مستقیم داده در string ها بود و f-string این نیاز رو برطرف می‌کرد. از زمان معرفی PEP 701 استفاده از اونها بیشتر هم شد چون استفاده از اون رو به شدت آسون‌تر می‌کرد. اما t-string ها مثل f-string ها عمل نمیکنند. میشه گفت t-string ها تمام قابلیت هایی که f-string ها داشتند رو دارند اما اگر نیاز شما به چیزی مشابه f-string ها هست که یک str برگردونه، واقعا لزومی نداره از t-string ها استفاده کنید چون فقط کار خودتون رو پیچیده کردید. وجود t-string ها ضربه‌ای به ماهیت f-string ها و علت وجودشون نمیزنه چون مفهومی متفاوت رو ارائه میده. همونطور که اشاره شد شما با استفاده از این syntax دیگه مستقیما یک string ندارید و مقداری از نوع Template برای شما برگردونده میشه. شما وقتی از f-string استفاده میکنید صرفا خروجی در اختیار شما قرار میگیره و عملا هیچ دسترسی مستقیمی به مقادیر داده شده به رشته ندارید، اما t-string ها اینطور نیستند. میشه گفت که اگر f-string خروجی (بَعد) چیزی که میخواین باشه، t-string یک ساختار نگه‌دارنده برای شماست (قبل از ایجاد). ضمن اینکه استفاده مستقیم از f-string ها برای انجام کار هایی میتونست مشکلات امنیتی (مثل sql injection) بوجود بیاره اما اینجا با مدیریت بهتر میشه از این مشکلات امنیتی هم در امان بود. چطور باید یک template ساده نوشت؟ c = "DevelopixPython" t = t"subscribe @{c}" خب، قطعا با خودتون گفتید که "این همون f-string نیست؟" که خب جواب به طور واضحی نه هست. اینجا متغیر t دیگه یک string نیست، یک Template هست. این چه امکاناتی رو به ما میده؟ 1. تفکیک قسمت های ثابت در رشته از متغیر های ورودی. 2. دسترسی مستقیم به ورودی ها (interpolations)، نوع‌تبدیل خواسته شده برای اونها (conversion)، نوع formatting خواسته شده برای اونها (format_spec) و حتی عبارت داده شده جهت جایگذاری! در PEP 498 گفته شده "به همون دلیلی که متد bytes.format رو نداریم، یک prefix با عنوان fb هم برای f-string ها نداریم". این قاعده درحال حاضر به طور کامل برای t-string ها هم صدق میکنه و tb هم معنی نداره. اما خب، همونطور که گفته شده این چیزی نیست که ازش چشم‌پوشی شده باشه و این برمیگرده به پیشنهادی که Steve Dower داد که مورد قبول واقع شد پس انتظار میره در آینده ترکیبی از bytes ها رو هم با این template ها شاهد باشیم. حالا سوالی پیش میاد. اینکه چه زمانی از f-string استفاده کنیم و چه زمانی از t-string؟ وقتی داریم در مورد f-string ها حرف میزنیم یعنی در خروجی انتظار یک str داریم که render شده. اما زمانی که در مورد template ها حرف می‌زنیم انتظار خروجی str نداریم. ما برای استفاده از template ها نیاز به یک processor داریم. به طور خیلی ساده میشه گفت t-string ها به منظور ایجاد string ها استفاده نمیشن و از اونها به عنوان ساختاری که داده های مرتبط به رشته رو به طور منظم نگه‌داری میکنه میشه یاد کرد. به طور کلی زمانی از t-string استفاده میکنید که شیوه ایجاد متن شما هم مهم هست و نیاز دارید که بدونید چه object هایی به عنوان ورودی و در چه قالبی داده شدند. اینطور با دست باز قادر به validate کردن اونها هستید و عملا از نحوه ایجاد رشته‌ای که در نهایت قراره خروجی شما باشه آگاهید. این یعنی t-string ها حتی string نیستند! برای گرفتن خروجی حتما به یک processor نیاز هست که درواقع صرفا استفاده کننده template ماست. تا قبل از ارائه میتونید خودتون نسخه‌ای که در cpython پیاده‌سازی شده رو build و استفاده کنید. همچنین میتونید نمونه هایی از استفاده از این قابلیت رو اینجا مشاهده کنید. پیشنهاد میشه logging.py, web.py و reuse.py و مخصوصا fstring رو برای درک بهتر این ویژگی مطالعه کنید. ✍️ *ژنرال* 🏷 #Python, #PEP, #TStrings, #template, #pep750, #strings 💎 Channel: @DevelopixPython
12 · 3K ·

Vicino nel feed

|| کانال توسعه‌دهندگان پایتون |💠 توابع مفهوم تابع چیه؟ تابع یک مفهوم کلی و بنیادیه که در زمینه‌های مختلفی مثل ریاضیات، برنامه‌نویسی و حتی زندگی روزمره کاربرد داره. تعریف ساده‌ای که می‌تونیم ب|| کانال توسعه‌دهندگان پایتون |#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython
questo messaggio
|| کانال توسعه‌دهندگان پایتون |🔥 تخفیف بزرگ سرور اختصاصی ابری هاست ایران از امروز شروع شد!🚀 🛸 ما تو هاست ایران با توجه به درخواست‌های پرتکرار شما، یک سرویس متفاوت راه انداختیم: 🌩 سرور اختصاصی|| کانال توسعه‌دهندگان پایتون |#سوال ✨ کار کدام تابع زودتر به پایان می‌رسد ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython
|| کانال توسعه‌دهندگان پایتون || کانال توسعه‌دهندگان پایتون |@DevelopixPython · canale · Tecnologia
7 646iscritti704copertura media dei post
Feed della community Apri in Telegram

Un feed pubblico aperto dall'indice di ricerca ChatCrawler — «Google per il Telegram pubblico»; si aggiorna man mano che la community viene scansionata. Orari in UTC.

Solo contenuti pubblici, API ufficiale di Telegram. Informazioni · FAQ · Limiti dell'indice · Rimuovi una pagina · Catalogo · Ricerca · Come calcoliamo