Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa `exec` Tidak Boleh Kemas Kini Secara Terus Pembolehubah Tempatan dalam Python 3?

Mengapa `exec` Tidak Boleh Kemas Kini Secara Terus Pembolehubah Tempatan dalam Python 3?

Patricia Arquette
Lepaskan: 2024-12-20 19:54:12
asal
807 orang telah melayarinya

Why Can't `exec` Directly Update Local Variables in Python 3?

Cara Pembolehubah Tempatan Tidak Boleh Dikemas Kini Terus dengan exec

Panggilan exec dalam Python ialah alat yang berkuasa untuk melaksanakan kod secara dinamik, tetapi ia datang dengan had mengenai pengubahsuaian pembolehubah tempatan.

Pertimbangkan perkara berikut kod:

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

f()
Salin selepas log masuk

Seseorang mungkin menjangkakan kod ini mencetak 3, tetapi ia sebenarnya mencetak 1. Ini kerana dalam Python 3, pembolehubah tempatan tidak disimpan dalam kamus, tetapi tatasusunan dengan indeks ditentukan semasa penyusunan masa. Fungsi exec tidak boleh mengubah suai pembolehubah tempatan dengan selamat tanpa mengganggu pengoptimuman ini.

Penyelesaian: Menggunakan Kamus Tempatan dengan exec

Untuk mengubah suai pembolehubah tempatan menggunakan exec, anda perlu untuk meluluskan kamus tempatan secara eksplisit. Contohnya:

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

Ini melaksanakan kod dalam kamus tempatan (ldict), yang berbeza daripada tatasusunan pembolehubah tempatan fungsi. Pembolehubah yang diubah suai kemudiannya boleh dikembalikan kepada skop fungsi dengan mengakses kamus tempatan.

Gelagat Python 2

Dalam Python 2, exec boleh mengubah suai pembolehubah tempatan tanpa lulus kamus eksplisit kerana ia menganggap ruang nama yang menggunakan exec tanpa hujah globals/locals sebagai "tidak dioptimumkan." Walau bagaimanapun, ini tidak berlaku dalam Python 3.

Oleh itu, adalah penting untuk diingat bahawa apabila menggunakan exec, pembolehubah tempatan hanya boleh dikemas kini dengan mencipta dan menghantar kamus tempatan untuk mengelakkan sebarang kemungkinan konflik dengan pengoptimuman pengkompil. .

Atas ialah kandungan terperinci Mengapa `exec` Tidak Boleh Kemas Kini Secara Terus Pembolehubah Tempatan dalam Python 3?. 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