Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah pengendali `is` berkelakuan berbeza dengan integer bukan cache di dalam dan di luar fungsi dalam Python?

Mengapakah pengendali `is` berkelakuan berbeza dengan integer bukan cache di dalam dan di luar fungsi dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 16:42:29612semak imbas

Why does the `is` operator behave differently with non-cached integers inside and outside functions in Python?

Pengendali is berkelakuan secara tidak dijangka dengan integer bukan cache


Pengendali is dalam Python digunakan untuk membandingkan identiti dua objek, bermakna ia menyemak sama ada ia merujuk kepada objek yang sama dalam ingatan. Walau bagaimanapun, apabila berurusan dengan integer bukan cache, operator is boleh berkelakuan dengan cara yang tidak dijangka.


Jika anda menilai operator is pada dua integer dalam fungsi, ia akan mengembalikan True, menunjukkan bahawa mereka merujuk kepada objek yang sama. Walau bagaimanapun, jika anda menilai yang sama adalah operator di luar fungsi, ia akan mengembalikan Palsu, menunjukkan bahawa ia merujuk kepada objek yang berbeza.


Ini adalah kerana cara Python mengendalikan caching integer. Untuk integer dalam julat [-5, 256], Python menyimpan cache objek integer dan menggunakannya semula untuk rujukan seterusnya. Ini bermakna apabila anda menetapkan integer dalam julat ini kepada berbilang pembolehubah dalam fungsi, semuanya merujuk kepada objek cache yang sama, dan oleh itu operator is mengembalikan True.


Walau bagaimanapun, apabila anda menetapkan integer di luar fungsi, ia mencipta objek integer baharu dan tidak menggunakan objek cache. Oleh itu, apabila anda membandingkan dua integer di luar fungsi, ia merujuk kepada objek yang berbeza dan operator is mengembalikan Palsu.


Untuk mengelakkan tingkah laku yang tidak dijangka ini, adalah disyorkan untuk menggunakan operator kesamarataan (==) untuk membandingkan nilai integer, bukannya operator is.

Atas ialah kandungan terperinci Mengapakah pengendali `is` berkelakuan berbeza dengan integer bukan cache di dalam dan di luar fungsi dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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