Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Gelagat Fungsi Exec Berbeza Antara Python 2 dan Python 3?
Gelagat Fungsi Exec dalam Python 2 berbanding Python 3
Pernyataan exec mempamerkan perbezaan yang ketara dalam tingkah laku antara Python 2 dan Python 3. Dalam Python 2, exec bertindak sebagai pernyataan, mengubah pembolehubah tempatan dengan berkesan dalam fungsi skop.
Walau bagaimanapun, dalam Python 3, exec() menjadi fungsi. Ini menghalang pengubahsuaian pembolehubah tempatan di dalam fungsi, walaupun mungkin dalam Python 2. Selain itu, pembolehubah yang diisytiharkan sebelum ini tidak boleh diubah suai.
Fungsi locals() hanya membenarkan pengemaskinian unilateral pembolehubah tempatan. Contohnya, dalam kod Python 2 berikut:
def foo(): a = 'spam' locals()['a'] = 'ham' print(a) # prints 'spam'
Penugasan 'ham' kepada locals()['a'] tidak menjejaskan nilai pembolehubah 'a' dalam fungsi, dan 'spam' kekal dicetak.
Dalam Python 2, exec secara eksplisit menyalin pembolehubah yang terdapat dalam locals() kembali ke fungsi locals menggunakan PyFrame_LocalsToFast. Walau bagaimanapun, dalam Python 3, gelagat ini tidak lagi boleh dilakukan.
Untuk mencapai gelagat yang diingini dalam Python 3, seseorang mesti menggunakan ruang nama baharu (contohnya, kamus) semasa panggilan exec(). Ini boleh dilihat dalam kod Python 3 berikut:
def execute(a, st): namespace = {} exec("b = {}\nprint('b:', b)".format(st), namespace) print(namespace['b'])
Dokumentasi exec() secara eksplisit menyatakan had yang dikenakan ke atas penggunaan locals():
"Nota: Penduduk lalai bertindak sebagai diterangkan untuk fungsi locals() di bawah: pengubahsuaian kepada kamus locals lalai tidak boleh dicuba Lulus kamus tempatan eksplisit jika anda perlu melihat kesan kod pada orang tempatan selepas function exec() kembali."
Atas ialah kandungan terperinci Bagaimanakah Gelagat Fungsi Exec Berbeza Antara Python 2 dan Python 3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!