Apakah Operator Ajaib Di Sebalik Python dengan Rentetan?

DDD
Lepaskan: 2024-10-21 17:46:03
asal
628 orang telah melayarinya

What's the Magic Behind Python's 'is' Operator with Strings?

Melaksanakan Operator 'is' Python untuk String: Panduan Komprehensif

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!