2016-11-17 9 views
14

Yani aynı davranışa sahip pek emin bir CPython şey var diğer uygulamalarla.'{0}'. Biçim()() ve '{}' str daha hızlıdır. Biçim() ipython% sürümüyle gelen timeit kullanarak ve aksi takdirde saf Python kullanarak

Ancak '{0}'.format()str() ve '{}'.format()'dan daha hızlıdır. Ben Python 3.5.2 sonuçları gönderme yapıyorum ama, ben Python 2.7.12ile denedim ve trend aynıdır. str(object) tarafından çağrılır object.__str__(self)

ve yerleşik işlevleri format() ve print() üzerinde docs itibaren

%timeit q=['{0}'.format(i) for i in range(100, 100000, 100)] 
%timeit q=[str(i) for i in range(100, 100000, 100)] 
%timeit q=['{}'.format(i) for i in range(100, 100000, 100)] 

1000 loops, best of 3: 231 µs per loop 
1000 loops, best of 3: 298 µs per loop 
1000 loops, best of 3: 434 µs per loop 

bir nesnenin “gayri” veya güzel yazdırılabilir dize temsilini hesaplamak için.

Yani, str() ve format() çağrı aynı object.__str__(self) yöntem, ancak hızda o fark nereden geliyor

? @StefanPochmann ve @Leon yorumlarda belirtildiği gibi

GÜNCELLEME , farklı sonuçlar elde.

$ python3 -m timeit "['{0}'.format(i) for i in range(100, 100000, 100)]" 
1000 loops, best of 3: 441 usec per loop 

$ python3 -m timeit "[str(i) for i in range(100, 100000, 100)]" 
1000 loops, best of 3: 297 usec per loop 

$ python3 -m timeit "['{}'.format(i) for i in range(100, 100000, 100)]" 
1000 loops, best of 3: 420 usec per loop 

yüzden ipython garip bir şey yapıyor gibi görünüyor ...

YENİ SORU: Ne tercih edilir yolu ben sonuçlarıdır çünkü onlar haklılar, python -m timeit "..." ile çalıştırmak için çalıştı ve Bir nesneyi str hızına dönüştürmek için?

+0

Daha hızlı olmak için, 'i_str __()' yi doğrudan kullanmayı deneyebilirsiniz. Gerçi str gerçekten uygun bir yol. Senin için yeterince hızlı değil mi? –

cevap