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

  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZİRAN 2013
  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009
  • Tube Time

    Tube Time

    14 Mayıs 2013