Python'un yeni `t-strings` özelliği
(davepeck.org)- t-string'ler (t-strings), Python 3.14 ile gelen yeni bir güvenli ve esnek metin işleme özelliğidir
- Mevcut f-string'lerden farklı olarak t-string, bir metin değil
Templatenesnesi döndürür; böylece otomatik çıktı üretmeden güvenli işlem yapılabilir - t-string, HTML, SQL gibi dinamik girdileri güvenli biçimde escape etme yapısına sahiptir
- JavaScript'teki tagged templates kavramına benzer; çeşitli dönüşüm ve işleme genişletmeleri yapılabilir
- Python geliştirme araçları ekosistemi bu özelliği iyi desteklerse, web/güvenlik odaklı metin işleme yaklaşımında büyük bir değişim yaratabilir
Python'un yeni özelliği: t-string'ler (Template Strings)
- Python 3.14 ile
t"..."sözdizimiyle kullanılan Template string'ler (t-strings) resmî bir özellik olarak geliyor - Mevcut f-string'lerden farklı olarak t-string, doğrudan bir metin yerine
string.templatelib.Templatenesnesi olarak değerlendirilir - Bu nesne, çıktıdan önce ayrı bir işleme aşaması gerektirir; bu süreç sayesinde dinamik değerler güvenli biçimde işlenip dönüştürülebilir
f-string neden riskli olabilir?
- f-string anında metne dönüştürüldüğü için, kullanıcı girdisi içeren kodlarda SQL Injection veya XSS ortaya çıkabilir
- Örnek:
f"<div>{user_input}</div>"→ saldırı kodu doğrudan eklenebilir
- Örnek:
- t-string bu değerlendirmeyi geciktirerek, yalnızca açıkça işlendikten sonra kullanılabilmesini sağlar
t-string kullanım örnekleri
-
HTML escape işleme örneği:
evil = "<script>alert('bad')</script>" template = t"<p>{evil}</p>" safe = html(template) # safe is "<p><script>alert('bad')</script></p>" -
Özelliklerin otomatik eklenmesi gibi daha karmaşık işlemler de mümkün:
attributes = {"src": "roquefort.jpg", "alt": "Yum"} template = t"<img {attributes} />" element = html(template) # result: "<img src='roquefort.jpg' alt='Yum' />"
Yapı ve API
-
Templatenesnesi,.stringsve.valuesözellikleri üzerinden kaynak metni ve eklenen değerleri ayrı sunar -
interpolationsözelliği sayesinde!s,:>8gibi biçimlendirme ayrıntılarına da erişilebilir -
Yineleme (iteration) ile metin ve değerlerin karışık durumları da doğrudan işlenebilir
-
Elle oluşturmak da mümkündür:
from string.templatelib import Template, Interpolation template = Template( "Hello ", Interpolation(value="World", expression="name"), "!" )
Eğlenceli bir örnek: Pig Latin dönüştürücü
-
Templatenesnesinin içeriğini dolaşıp kelimeleri Pig Latin'e dönüştüren örnek:def pig_latin(template: Template) -> str: ... name = "world" template = t"Hello {name}!" assert pig_latin(template) == "Hello orldway!"
Gelecekteki gelişim yönü
- t-string'ler, web/güvenlik odaklı metin işleme yaklaşımına güvenlik ve genişletilebilirlik kazandırabilir
black,ruff, VS Code gibi geliştirme araçlarının t-string biçimlendirme/vurgulama desteği sunması bekleniyor- JavaScript geliştiricilerinin alışık olduğu tagged template yaklaşımına benzer olduğu için, çeşitli framework'lerde de kullanım potansiyeli yüksek
Geliştirici topluluğuyla iş birliği
- Bu özellik, çeşitli Python topluluğu üyelerinin katılımı ve iş birliğiyle tamamlandı
- Özellikle Jim, Paul, Koudai, Lysandros ve Guido gibi kilit isimlerle yapılan etkileşimlerden söz ediliyor
- PEP 750 ve örnek deposu GitHub üzerinden incelenebilir
Python 3.14'ün t-string özelliği, metinlerde güvenlik ve genişletilebilirliği aynı anda sağlayarak mevcut f-string'lerin sınırlarını aşan önemli bir sıçrama sunuyor
2 yorum
PEP 750 – Şablon dizeleri (
t-strings) onaylandıHacker News yorumu
Genel olarak bu özellik oldukça hoş. Temelde şu kodu
şuna dönüştürüyor
Bu sözdizimsel şekerin, yeni bir dil özelliğinin getirdiği karmaşıklığa değecek kadar faydalı olup olmadığı sorusu var. Bu durumda iki nedenle değdiğini düşünüyorum
{}genişletmesi üzerinden istediklerini yapabilmesi iyi bir şey ve muhtemelen iyi kullanım örnekleri ortaya çıkaracaktırAyrıca araç ekosisteminin t-strings desteğine uyum sağlamasını umuyorum. Örneğin black ve ruff t-string içeriğini biçimlendirse, vscode da HTML veya SQL gibi yaygın içerik türlerini renklendirse güzel olurdu
sql”select * from {table}”gibi bir şey bunu yapabilirdi, ancak şablondaki ifadenin dönüşüm fonksiyonu tarafından geçerli SQL'e çevrileceğinin garantisi yok.t“give me {table} but only {columns}”ifadesi, şablon işlendiğinde geçerli SQL'e dönüşebilirŞöyle temiz bir SQL sözdizimi kullanabilir miyiz?
Eğer
db.get()fonksiyonu şablonu kabul ediyorsa, evet. Şimdiye kadar SQL kullanmanın gördüğüm en temiz yolu bu olurduŞahsen bu özellik, genel amaçlı bir özellik olmak için fazla spesifik bir soruna odaklanmış gibi geliyor. Python giderek büyüyor. İnsanlar Python'un öğrenmesinin kolay ve basit olup olmadığını sorduğunda, "temelleri evet, ama dilin tamamını öğrenmek o kadar değil" demek gerekiyor
Büyük tartışma (414 puan, 10 gün önce, 324 yorum) bağlantı
Oldukça hoş. Madem JS özellikleri taşınıyor, sırada dictionary unpacking/destructuring gelebilir mi?
Yeni x-string özelliğinin yerleşik olarak gelmesi bana biraz "hile" gibi geliyor. Şöyle bir şey yapabilsek hoş olurdu
2025'in Zen of Python'ı:
2025'te Python string formatting:
Şablona uygulanacak fonksiyonun, f-string içindeki değişkene fonksiyon uygulamaktan nasıl farklı olduğunu anlamıyorum. Yani şunun yerine:
neden doğrudan şunu yapmıyoruz:
Ya da f-string oluşturmadan önce. Mesele sadece arındırma/string manipulation kısmını unutmayı önlemek ve bunu zorunlu kılmak mı?
Merhaba! Bu yazıyı ben yazdım :-)