Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Gelagat Fungsi Exec Berbeza Antara Python 2 dan Python 3?

Bagaimanakah Gelagat Fungsi Exec Berbeza Antara Python 2 dan Python 3?

Linda Hamilton
Lepaskan: 2024-11-14 22:02:02
asal
931 orang telah melayarinya

How Does Exec Function Behavior Differ Between Python 2 and 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'
Salin selepas log masuk

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'])
Salin selepas log masuk

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!

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