Python string biçimlendirme: % vs .format
Python 2.6 %
mevcut operatöründen biraz farklı bir sözdizimi ile str.format()
yöntem tanıttı. Hangisi daha iyi ve hangi durumlar için?
Aşağıdaki her yöntemi kullanır ve aynı sonuç, ne fark eder ki ben?
#!/usr/bin/python sub1 = "python string!" sub2 = "an arg" a = "i am a %s" % sub1 b = "i am a {0}".format(sub1) c = "with %(kwarg)s!" % {'kwarg':sub2} d = "with {kwarg}!".format(kwarg=sub2) print a # "i am a python string!" print b # "i am a python string!" print c # "with an arg!" print d # "with an arg!"
Ayrıca ne zaman dize biçimlendirme Python oluşuyor mu? Eğer günlük seviyem YÜKSEK olacaktır için ayarlı ise, örneğin, ben hala
%
aşağıdaki işlemi gerçekleştirmek için büyük bir darbe alacak? Ve eğer, bunu önlemek için bir yol var mı?log.debug("some debug info: %s" % some_info)
CEVAP
... .format
ilk sorunuza cevap vermek pek çok yönden daha gelişmiş görünüyor. %
hakkında sinir bozucu bir şey ya da bir değişken ya da bir demet alabilir. Aşağıdaki her zaman işe yarayacağını düşünebilirsiniz
"hi there %s" % name
eğer name
olursa yine de, (1, 2, 3)
, TypeError
bir durum oluşturur. Her zaman baskı güvence altına almak için, yapmanız gereken istediğiniz
"hi there %s" % (name,) # supply the single argument as a single-item tuple
sadece çirkin olan. .format
bu konular yok. Verdiğin ikinci örnekte de, .format
örnek çok daha temiz görünüyor.
Neden bunu kullanmak istiyorsunuz?
- haberi (bunu okumadan önce bana)
- sahip Python 2.5 ile uyumlu olacak şekilde
İkinci sorunun cevabı, string biçimlendirme dize biçimlendirme ifadesi değerlendirildiğinde başka bir operasyon aynı anda olur. Ve Python olmaktan tembel bir dil, ifadeleri değerlendirir çağırmadan önce çalışır, yani senin log.debug
örneğin, ifade "some debug info: %s"%some_info
ilk değerlendirme için, örneğin "some debug info: roflcopters are active"
, bu dize olacak geçti log.debug()
.
Python string biçimlendirme için birde...
JavaScript, basit bir beşgen kullanmak...
Python katılın, neden dize.liste yerin...
Python string dönüştürme tamsayı?...
Hex string Python int dönüştürmek...