Backticks python yorumlayıcısı için ne ifade ediyor: `num`
Etrafta liste üreteçleri ile oynuyorum ve karşısında başka bir sitede bu küçük parçacık geldim:
return ''.join([`num` for num in xrange(loop_count)])
Birkaç dakika `num`
bit kırılma olduğunu fark ettiklerinde önce fonksiyon (yazarak) çoğaltmak için harcadım.
Bu karakterleri bir açıklama çevreleyen ne yapar? Bu gördüğüm kadarıyla. str eşdeğer(sayı). Ama tuttum:
return ''.join([str(num) for num in xrange(10000000)])
4.09 ise s alır:
return ''.join([`num` for num in xrange(10000000)])
2.43 alır.
Her ikisi de ama çok yavaş aynı sonuçlar verir. Burada neler oluyor?
DÜZENLEME:Garip bir şekilde... repr()
`num`
göre biraz daha yavaş sonuç verir. 2.99 s vs 2.43. Kullanan Python 2.6 (3.0 henüz denemedim).
CEVAP
Backticks repr()
kaldırılan bir diğer adı. Onları daha fazla kullanmayın, sözdizimi Python 3.0 kaldırıldı.
Backticks kullanarak repr(num)
veya sürüm 2 num.__repr__()
kullanarak daha hızlı gibi görünüyor.x. Ek sözlük arama genel ad (repr
), veya nesnenin ad (__repr__
) sırasıyla gerekli olduğu için sanırım.
EDİT: dis
modülü kullanarak benim varsayım kanıtlıyor:
def f1(a):
return repr(a)
def f2(a):
return a.__repr__()
def f3(a):
return `a`
Gösterir sökülmesi:
>>> import dis
>>> dis.dis(f1)
3 0 LOAD_GLOBAL 0 (repr)
3 LOAD_FAST 0 (a)
6 CALL_FUNCTION 1
9 RETURN_VALUE
>>> dis.dis(f2)
6 0 LOAD_FAST 0 (a)
3 LOAD_ATTR 0 (__repr__)
6 CALL_FUNCTION 0
9 RETURN_VALUE
>>> dis.dis(f3)
9 0 LOAD_FAST 0 (a)
3 UNARY_CONVERT
4 RETURN_VALUE
f1
backtick operatör ayrı bir işlem kodu uygulanır ise __repr__
, ** f2
20 öznitelik araması için küresel bir arama içerir. İşlev çağrıları (CALL_FUNCTION
) için sözlük arama (LOAD_GLOBAL
/LOAD_ATTR
için ne yükü diye bir şey yok bu yana, backticks daha hızlıdır.
Sanırım Python Millet karar olması ayrı bir düşük seviye kullanım için repr()
değil buna değer, ve her ikisi de repr()
ve backticks ihlal ilkesi “olmalı-- ve tercihen tek açık var”, yani bu özellik kaldırıldı Python 3.0.
Nasıl Python ile ikili rakamları ifade...
Nasıl python yorumlayıcısı net konsol ...
Bunu xml dosyasından bir görünüm şişir...
Nasıl python yorumlayıcısı yapmak doğr...
Nasıl dize bir normal ifade giriş için...