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!