Dalam Python, operator 'is' biasanya digunakan untuk menguji kesamaan rentetan. Walau bagaimanapun, pelaksanaannya menonjol daripada pengendali kesamarataan lain seperti '__eq__'. Artikel ini meneroka selok-belok cara 'is' beroperasi dalam Python.
Tidak seperti '__eq__,' yang menyemak kesamaan kandungan, 'is' menilai identiti. Apabila berurusan dengan rentetan, ini menandakan bahawa 'ialah' menentukan sama ada dua rentetan itu menduduki lokasi memori yang sama.
Cabaran timbul apabila cuba meniru gelagat 'ialah' dalam kelas tersuai. Mentakrifkan kaedah '__is__' tidak mencukupi, kerana Python menjangkakan pelaksanaan tertentu. Untuk menyelaraskan dengan jangkaan Python, adalah penting untuk memahami sifat interning dalam rentetan.
Interning melibatkan penyimpanan objek rentetan dalam cache pusat, memastikan bahawa berbilang rujukan kepada rentetan yang sama menunjuk kepada satu contoh dikongsi. Pengoptimuman ini meningkatkan prestasi dengan mengurangkan penggunaan memori dan meningkatkan kelajuan.
Dalam Python, literal rentetan seperti 'abc' dimasukkan secara automatik. Oleh itu, (('abc' == 'abc') dan ('abc' ialah 'abc')) nilaikan kepada Benar. Walau bagaimanapun, untuk rentetan tersuai, amali mesti dilakukan secara eksplisit.
Contoh berikut menggambarkan perbezaan antara 'is' dan '__eq__' dengan rentetan yang dilatih dan tidak dilatih:
<code class="python">>>> s = 'str' >>> s is 'str' True >>> class MyString: ... def __init__(self): ... self.s = 'string' ... def __eq__(self, s): ... return self.s == s ... >>> m = MyString() >>> m is 'string' False >>> sys.intern(m) is 'string' # After interning, 'is' returns True True</code>
Kepada ringkaskan, 'is' menyemak identiti objek dalam Python, membandingkan lokasi memori. Untuk rentetan, ini menunjukkan bahawa latihan memainkan peranan yang besar. Rentetan yang diinternet berkongsi alamat memori yang sama, membenarkan 'is' menentukan kesamaan dengan betul. Apabila melaksanakan 'adalah' dalam kelas tersuai, memastikan latihan dikendalikan dengan sewajarnya adalah penting untuk meniru tingkah laku Python.
Atas ialah kandungan terperinci Apakah Operator Ajaib Di Sebalik Python dengan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!