SORU
22 ŞUBAT 2011, Salı


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?

  1. 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!"
    
  2. 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
22 ŞUBAT 2011, Salı


... .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_infoilk değerlendirme için, örneğin "some debug info: roflcopters are active", bu dize olacak geçti log.debug().

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • infiniTuts

    infiniTuts

    18 Ocak 2012
  • MrSuicideSheep

    MrSuicideShe

    9 NİSAN 2010