Panggilan Fungsi Tidak Mengemas kini Pembolehubah Global
Soalan ini meneroka cabaran pengaturcaraan di mana pembolehubah global, yang pada mulanya ditetapkan sebagai Palsu, adalah' t sedang dikemas kini apabila dirujuk dalam fungsi. Walaupun fungsi mengubah nilai pembolehubah global, gelung program utama terus dilaksanakan, membawa kepada gelung tak terhingga. Memahami isu ini memerlukan mendalami konsep ruang nama dan skop pembolehubah.
Ruang Nama dan Skop Pembolehubah
Dalam pengaturcaraan, setiap fungsi dan modul mencipta ruang nama sendiri. Ruang nama ialah koleksi nama (pembolehubah, fungsi, dll.) yang diketahui dan boleh diakses dalam skop tersebut. Apabila pembolehubah diberikan nilai di dalam fungsi, pembolehubah baharu dicipta dalam ruang nama fungsi, walaupun pembolehubah global dengan nama yang sama wujud.
Menggunakan Pembolehubah global
Dalam kes ini, apabila pembolehubah global yang dipanggil "selesai" dirujuk dalam fungsi, pembolehubah tempatan baharu dengan nama yang sama dicipta dalam ruang nama fungsi. "selesai" tempatan ini berbeza daripada "selesai" global. Menukar "selesai" setempat tidak mempunyai kesan ke atas pembolehubah global.
Penyelesaian
Untuk mengatasinya, kata kunci global mesti digunakan untuk merujuk pembolehubah global secara eksplisit dalam fungsi. Dengan menggunakan global done, fungsi ini memberitahu jurubahasa untuk mengakses pembolehubah "selesai" global dan bukannya mencipta tempatan baharu.
Kod Diubah Suai
Untuk menyelesaikan isu , fungsi boleh diubah suai seperti berikut:
<code class="python">def function(): global done for loop: code if not comply: done = True</code>
Penjelasan
Menggunakan global done mewujudkan hubungan antara pembolehubah yang digunakan dalam fungsi dan yang global. Apabila fungsi mengubah suai nilai selesai, ia mengemas kini pembolehubah global yang sama yang dirujuk pada mulanya. Ini memastikan bahawa gelung sementara program utama akan ditamatkan seperti yang dimaksudkan apabila fungsi ditetapkan kepada Benar.
Atas ialah kandungan terperinci Mengapa Panggilan Fungsi Tidak Mengemas kini Pembolehubah Global?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!