2016-09-23 9 views
9

str fonksiyonu ve yüzde operatörü arasında bir fark var mı Bu ikisi arasında bir fark var mı? İkinci vaka örtük bir dizeye obj dönüştürmek için str(obj) çağırır çünkü (Python docs okuma, ben, hiçbir şüpheli olur.Python bir dizeye bir nesneyi dönüştürürken, ben iki farklı deyimleri gördü Python

evet, ben?

Hayır ise kullanmalısınız zaman hangisini yapayım "iyi" piton kodunda tercih? ("örtük üzerinde tam" piton felsefesi itibaren daha iyi biri olarak kabul edilecektir?)

+0

İlk ama çok iyi bir soru için giderdim (+1) - Bazı profesyonel pythonistaların cevap vereceğine eminim :) – Jan

cevap

16

ikinci versiyonu daha fazla iş yapar.

%s operatör üzerinde str() çağırır enterpolasyona değer, ama aynı zamanda t o ilk önce yer tutucuyu bulmak için şablon dizesini ayrıştırın. senin şablonu dizesi fazla metin içermedikçe

, "%s" % obj ifadesi daha döngüleri geçirmek Python soran hiçbir nokta yoktur.

Ancak paradoksal olarak, str() dönüşüm, uygulamada, daha yavaş adını str() bakarak ve işlevi çağırmak için yığını iterek olarak dize ayrıştırma daha fazla zaman alır :

>>> from timeit import timeit 
>>> timeit('str(obj)', 'obj = 4.524') 
0.32349491119384766 
>>> timeit('"%s" % obj', 'obj = 4.524') 
0.27424097061157227 

Çoğu kurtarabilirsiniz ilk yerel bir isme str bağlanarak bu farkın: string şablon seçeneğini kullanarak, en Python geliştiricileri için

>>> timeit('_str(obj)', 'obj = 4.524; _str = str') 
0.28351712226867676 

olarak kafa karıştırıcı olacak 210 çok daha basittir. Çok sayıda dize dönüşümü yapan kritik bir bölümünüz olmadıkça, işleve bağlı kalın.

+1

Bu sayıları beklemezdim. Zamanlama sonuçları için teşekkürler – sisanared

+0

Kesin ve hızlı cevap için teşekkür ederiz;) –

+0

Ayrıca, "% s"% obj 'trick, eğer bir objedir. –