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.
İlk ama çok iyi bir soru için giderdim (+1) - Bazı profesyonel pythonistaların cevap vereceğine eminim :) – Jan