Rumah >pembangunan bahagian belakang >Tutorial Python >Sejauh manakah Kecekapan Rangkaian Rentetan Python dan Bilakah Ia Mengoptimumkan?
Apabila menambahkan rentetan pada rentetan lain, ia adalah cekap untuk mengoptimumkan operasi, terutamanya untuk senario dengan pelbagai gabungan. Kaedah tradisional yang diterangkan dalam soalan, var3 = var1 var2, tidak selalunya yang paling berkesan.
CPython, pelaksanaan lalai Python, menggunakan pengoptimuman khusus untuk penggabungan rentetan apabila hanya satu rujukan kepada rentetan awal wujud. Pengoptimuman ini cuba memanjangkan rentetan di tempatnya, menghasilkan operasi O(n) terlunas. Ini bermakna untuk senario seperti:
s = "" for i in range(n): s += str(i)
yang sebelum ini O(n^2), kini jauh lebih pantas, pada O(n).
Pengoptimuman CPython dilaksanakan dalam fungsi _PyBytes_Resize dalam bytesobject.c. Ia memperuntukkan semula memori untuk objek rentetan, meningkatkan saiznya dengan jumlah yang ditentukan. Jika berjaya, ia mengemas kini saiz rentetan dan menetapkan bait nol tertinggal untuk menamatkan rentetan.
Untuk menunjukkan pengoptimuman ini secara empirik, pertimbangkan perkara berikut keputusan timeit:
$ python -m timeit -s"s=''" "for i in xrange(10):s+='a'" 1000000 loops, best of 3: 1.85 usec per loop $ python -m timeit -s"s=''" "for i in xrange(100):s+='a'" 10000 loops, best of 3: 16.8 usec per loop $ python -m timeit -s"s=''" "for i in xrange(1000):s+='a'" 10000 loops, best of 3: 158 usec per loop $ python -m timeit -s"s=''" "for i in xrange(10000):s+='a'" 1000 loops, best of 3: 1.71 msec per loop $ python -m timeit -s"s=''" "for i in xrange(100000):s+='a'" 10 loops, best of 3: 14.6 msec per loop $ python -m timeit -s"s=''" "for i in xrange(1000000):s+='a'" 10 loops, best of 3: 173 msec per loop
Untuk rentetan yang lebih kecil, overhed adalah minimum, tetapi apabila saiz rentetan bertambah, pendekatan yang dioptimumkan menjadi lebih cekap dengan ketara.
Adalah penting untuk ambil perhatian bahawa pengoptimuman ini bukan sebahagian daripada spesifikasi Python. Ia adalah butiran pelaksanaan khusus CPython dan mungkin tidak terdapat dalam pelaksanaan Python lain seperti PyPy atau Jython.
Atas ialah kandungan terperinci Sejauh manakah Kecekapan Rangkaian Rentetan Python dan Bilakah Ia Mengoptimumkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!