Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Kemas Kini Pembolehubah Tempatan Dalam Fungsi `exec` Python?

Bagaimanakah Saya Boleh Kemas Kini Pembolehubah Tempatan Dalam Fungsi `exec` Python?

Barbara Streisand
Lepaskan: 2024-12-06 01:58:10
asal
711 orang telah melayarinya

How Can I Update Local Variables Within Python's `exec` Function?

Mengatasi Had Kemas Kini Pembolehubah dengan Python Exec

Dalam Python, fungsi exec membenarkan pelaksanaan dinamik kod Python pada masa jalan. Walau bagaimanapun, apabila digunakan dengan pembolehubah tempatan, ia boleh bertindak secara tidak dijangka.

Masalahnya:

Pertimbangkan kod berikut:

def f():
    a = 1
    exec("a = 3")
    print(a)

f()
Salin selepas log masuk

Dalam Python 2, kod ini akan mencetak 3, menunjukkan bahawa pembolehubah tempatan a telah dikemas kini dalam panggilan exec. Walau bagaimanapun, dalam Python 3, ia mencetak 1, menimbulkan persoalan tentang cara mengemas kini pembolehubah setempat semasa panggilan exec.

Penyelesaian:

Untuk menangani isu ini, anda perlu menghantar kamus tempatan secara eksplisit kepada fungsi exec:

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)
Salin selepas log masuk

Dengan menggunakan locals(), anda mencipta tempatan baharu ruang nama berubah untuk panggilan exec. Pengubahsuaian pada ruang nama ini akan dicerminkan dalam skop setempat fungsi foo.

Isi Utama:

  • Python 3 mengoptimumkan storan pembolehubah setempat, mempengaruhi gelagat exec .
  • Kamus tempatan lalai untuk exec tidak boleh diubah suai dalam Python 3.
  • Menggunakan kamus tempatan yang eksplisit membolehkan kemas kini pembolehubah setempat dalam panggilan exec.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini Pembolehubah Tempatan Dalam Fungsi `exec` Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan