Vì vậy, đó là một điều CPython, không hoàn toàn chắc chắn rằng nó có cùng hành vi với các triển khai khác.'{0}'. Định dạng() nhanh hơn định dạng str() và '{}'.() Sử dụng IPython% timeit và sử dụng Python thuần
Nhưng '{0}'.format()
nhanh hơn str()
và '{}'.format()
. Tôi đang đăng kết quả từ Python 3.5.2, nhưng, tôi đã thử nó với Python 2.7.12 và xu hướng giống nhau.
%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
Từ docs trên object.__str__(self)
gọi bởi
str(object)
và được xây dựng trong các chức năngformat()
vàprint()
để tính các đại diện chuỗi “không chính thức” hay độc đáo in của một đối tượng.
Vì vậy, str()
và format()
gọi cùng phương thức object.__str__(self)
, nhưng sự khác biệt về tốc độ đến từ đâu?
CẬP NHẬT như @StefanPochmann và @Leon ghi nhận trong nhận xét, họ nhận được kết quả khác nhau. Tôi cố gắng để chạy nó với python -m timeit "..."
và, họ là đúng, vì kết quả là:
$ 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
Vì vậy, có vẻ như IPython đang làm một cái gì đó kỳ lạ ...
MỚI HỎI: cách gì được ưa thích thế nào để chuyển đổi một đối tượng sang tốc độ str
?
Để nhanh hơn, bạn cũng có thể thử sử dụng 'i .__ str __()' trực tiếp. Mặc dù 'str' thực sự là cách thích hợp. Nó không đủ nhanh cho bạn sao? –