Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Pengendali `is` Berkelakuan Berbeza dengan Integer Bukan Cache Fungsi Dalam dan Luar?

Mengapa Pengendali `is` Berkelakuan Berbeza dengan Integer Bukan Cache Fungsi Dalam dan Luar?

DDD
DDDasal
2024-11-03 16:52:301010semak imbas

Why Does the `is` Operator Behave Differently with Non-Cached Integers Inside and Outside Functions?

Adalah Gelagat Tidak Dijangka Operator dengan Integer Bukan Cache

Soalan:

Dalam fungsi, operator is kembali Benar apabila membandingkan dua literal integer di luar julat [-5, 256], tetapi Palsu apabila dilakukan di luar fungsi. Mengapakah ketidakkonsistenan ini berlaku?

Jawapan:

tl;dr:

Jawapan Python melaksanakan blok kod sebagai unit . Fungsi adalah blok tunggal, manakala arahan interaktif adalah blok berasingan. Setiap blok mengandungi objeknya sendiri, termasuk integer. Oleh itu, integer yang diisytiharkan dalam fungsi menghala ke objek yang sama, manakala yang diisytiharkan di luar tidak.

Penjelasan:

  • Fungsi :

    • Blok kod ditakrifkan dalam fungsi.
    • Literal dalam blok (cth., 1000) disimpan sebagai objek tunggal.
    • menyemak identiti objek, jadi a ialah b dalam fungsi mengembalikan True kerana a dan b kedua-dua titik ke objek yang sama.
  • Interaktif Arahan:

    • Setiap arahan dilaksanakan sebagai blok kod yang berasingan.
    • Literal dalam setiap blok disimpan sebagai objek berasingan.
    • sedang menyemak identiti objek , dan kerana objek untuk literal adalah berbeza, a adalah b kembali Salah.

Pemerhatian Tambahan:

  • Tingkah laku ini berlaku untuk literal bukan integer (cth., literal terapung) .
  • Python menggunakan kamus untuk menyimpan pemalar dalam objek kod dan menyemak sedia ada pemalar sebelum menambah yang baharu.

Kaveat:

  • Pernyataan Berantai: Apabila perintah dirantai (mis., a = b = 1000), mereka ditafsirkan sebagai blok kod tunggal, yang membawa kepada Benar.
  • Pelaksanaan Tahap Modul: Pelaksanaan tahap modul (cth., a = b = 1000) berlaku dalam satu blok kod, menghasilkan Benar.
  • Objek Boleh ubah: Ketidakkonsistenan tidak digunakan pada objek boleh ubah; a = b = [] akan sentiasa menghasilkan Palsu.

Atas ialah kandungan terperinci Mengapa Pengendali `is` Berkelakuan Berbeza dengan Integer Bukan Cache Fungsi Dalam dan Luar?. 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