`t-strings` Baru di Python
(davepeck.org)- t-string adalah fitur pemrosesan string yang aman dan fleksibel yang baru diperkenalkan di Python 3.14
- Berbeda dari f-string yang sudah ada, t-string mengembalikan objek
Template, bukan string, sehingga memungkinkan pemrosesan aman tanpa output otomatis - t-string memiliki struktur yang memungkinkan escape aman untuk input dinamis seperti HTML, SQL, dan lainnya
- Konsepnya mirip dengan tagged templates di JavaScript, sehingga dapat diperluas untuk berbagai transformasi dan pemrosesan
- Jika ekosistem alat pengembang Python mendukung fitur ini dengan baik, hal ini dapat membawa perubahan besar pada cara pemrosesan string yang berfokus pada web/keamanan
Fitur baru Python: t-string (Template Strings)
- Mulai Python 3.14, Template string (t-strings) yang digunakan dengan sintaks
t"..."diperkenalkan sebagai fitur resmi - Berbeda dari f-string yang sudah ada, t-string dievaluasi sebagai objek
string.templatelib.Template, bukan langsung sebagai string - Objek ini memerlukan proses pengolahan terpisah sebelum ditampilkan, dan melalui proses ini dimungkinkan penanganan serta transformasi nilai dinamis secara aman
Mengapa f-string bisa berbahaya?
- Karena f-string langsung dievaluasi menjadi string, kode yang menyertakan input pengguna dapat menimbulkan SQL Injection atau XSS
- Contoh:
f"<div>{user_input}</div>"→ kode serangan dapat disisipkan secara langsung
- Contoh:
- t-string menunda evaluasi semacam ini sehingga hanya bisa digunakan setelah diproses secara eksplisit
Contoh penggunaan t-string
-
Contoh pemrosesan escape HTML:
evil = "<script>alert('bad')</script>" template = t"<p>{evil}</p>" safe = html(template) # safe adalah "<p><script>alert('bad')</script></p>" -
Pemrosesan yang lebih kompleks seperti penyisipan atribut otomatis juga dimungkinkan:
attributes = {"src": "roquefort.jpg", "alt": "Yum"} template = t"<img {attributes} />" element = html(template) # hasil: "<img src='roquefort.jpg' alt='Yum' />"
Struktur dan API
-
Objek
Templatemenyediakan teks asli dan nilai yang disisipkan secara terpisah melalui properti.stringsdan.values -
Detail format seperti
!s,:>8, dan lainnya juga dapat diakses melalui propertiinterpolations -
Keadaan campuran antara teks dan nilai juga bisa diproses langsung melalui iterasi
-
Pembuatan manual juga dimungkinkan:
from string.templatelib import Template, Interpolation template = Template( "Hello ", Interpolation(value="World", expression="name"), "!" )
Contoh menarik: konverter Pig Latin
-
Contoh yang mengubah kata-kata menjadi Pig Latin dengan mengiterasi isi objek Template:
def pig_latin(template: Template) -> str: ... name = "world" template = t"Hello {name}!" assert pig_latin(template) == "Hello orldway!"
Arah perkembangan ke depan
- t-string dapat membawa keamanan dan ekstensibilitas ke cara pemrosesan string yang berfokus pada web/keamanan
- Diharapkan alat pengembang seperti
black,ruff, dan VS Code mendukung format/highlighting t-string - Karena mirip dengan tagged templates yang akrab bagi pengembang JavaScript, peluang pemanfaatannya di berbagai framework juga tinggi
Kolaborasi dengan komunitas pengembang
- Fitur ini diselesaikan melalui partisipasi dan kolaborasi berbagai anggota komunitas Python
- Secara khusus disebutkan interaksi dengan tokoh-tokoh kunci seperti Jim, Paul, Koudai, Lysandros, dan Guido
- PEP 750 dan repositori contoh-contohnya dapat dilihat di GitHub
Fitur t-string di Python 3.14 sekaligus menghadirkan keamanan dan ekstensibilitas pada string, serta menjadi lompatan penting yang melampaui keterbatasan f-string yang ada
2 komentar
PEP 750 – String templat (
t-strings) disetujuiOpini Hacker News
Secara keseluruhan, fitur ini cukup keren. Pada dasarnya, ini mengubah kode seperti berikut
menjadi seperti ini
Ada pertanyaan apakah gula sintaks ini cukup bermanfaat untuk membenarkan kompleksitas fitur bahasa yang baru. Saya rasa dalam kasus ini, jawabannya iya, karena dua alasan
{}, dan kemungkinan ini akan menghasilkan use case yang bagusSaya juga berharap ekosistem tooling beradaptasi untuk mendukung t-strings. Misalnya, akan bagus jika black dan ruff memformat isi t-string, dan vscode memberi pewarnaan untuk jenis konten umum seperti HTML atau SQL
sql"select * from {table}"mungkin bisa melakukan itu, tetapi tidak ada jaminan bahwa apa yang ada di dalam template akan diubah oleh fungsi konversi menjadi SQL yang valid.t"give me {table} but only {columns}"bisa saja diubah menjadi SQL yang valid setelah template diprosesApakah kita bisa memakai sintaks SQL yang rapi seperti berikut?
Jika fungsi
db.get()menerima template, maka seharusnya bisa. Ini akan menjadi cara paling rapi untuk memakai SQL yang pernah saya lihat sejauh iniSecara pribadi, menurut saya fitur ini terlalu berfokus pada masalah yang terlalu spesifik untuk menjadi fitur umum. Python terus membesar. Ketika orang bertanya apakah Python mudah dipelajari dan sederhana, kita harus menjawab, "dasarnya iya, tetapi mempelajari seluruh bahasanya tidak"
Diskusi besar (414 poin, 10 hari lalu, 324 komentar) tautan
Cukup keren. Kalau kita mem-port fitur JS, apakah berikutnya kita bisa mendapatkan dictionary unpacking/destructuring?
Rasanya agak seperti "curang" kalau fitur x-string baru hanya dibangun sebagai bawaan. Akan keren kalau kita bisa melakukan sesuatu seperti ini
Zen of Python tahun 2025:
Pemformatan string Python tahun 2025:
Saya tidak paham bagaimana ini berbeda dari menerapkan fungsi ke variabel f-string di dalam template. Jadi, alih-alih seperti ini:
mengapa tidak langsung begini saja:
Atau sebelum membuat f-string. Apakah ini hanya agar orang tidak lupa bagian sanitasi/manipulasi string dan dipaksa melewatinya?
Halo! Saya yang menulis artikel ini :-)