Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Gelagat Fungsi `exec` Berbeza dalam Python 2 dan Python 3?

Bagaimanakah Gelagat Fungsi `exec` Berbeza dalam Python 2 dan Python 3?

Linda Hamilton
Linda Hamiltonasal
2024-11-18 06:27:02220semak imbas

How Does the Behaviour of the `exec` Function Differ in Python 2 and Python 3?

Gelagat Fungsi exec dalam Python 2 vs. Python 3

Dalam Python 2 dan Python 3, fungsi exec mempamerkan perbezaan yang ketara dalam tingkah laku .

Sebab untuk Perbezaan

Dalam Python 2, exec ialah pernyataan yang melumpuhkan pengoptimuman skop tempatan secara eksplisit dan membenarkan akses kepada pembolehubah dalam skop tempatan dan global. Sebaliknya, exec() Python 3 ialah fungsi yang sentiasa mengoptimumkan skop fungsi.

Impak pada Pengikatan Pembolehubah

Dalam Python 2, apabila menggunakan pernyataan exec, pembolehubah ditemui dalam locals() telah disalin kembali ke fungsi locals. Ini mengakibatkan pengikatan pembolehubah di dalam fungsi kepada nilai yang dinyatakan dalam pernyataan exec.

Dalam Python 3, walau bagaimanapun, exec() tidak mempunyai gelagat ini secara lalai. Oleh itu, pembolehubah di dalam fungsi tidak terikat kepada pembolehubah dalam pernyataan exec().

Mengakses Pembolehubah Setempat

Untuk mengakses pembolehubah setempat menggunakan exec() dalam Python 3 , ruang nama baharu (biasanya kamus) hendaklah dibuat dan diserahkan sebagai hujah kepada fungsi tersebut.

Disemak Kod

Di bawah ialah contoh kod yang disemak semula yang menunjukkan penggunaan exec() yang betul dalam Python 3 untuk mencapai kelakuan Python 2:

def execute(a, st):
    namespace = {}
    exec("b = {}\nprint('b:', b)".format(st), namespace)
    print(namespace['b'])

Dalam kod ini, a kamus bernama ruang nama dicipta dan diserahkan kepada exec(). Sebarang pembolehubah yang ditakrifkan dalam pernyataan exec() akan boleh diakses melalui kamus.

Nota

Dokumentasi exec() dengan jelas memberi amaran terhadap percubaan pengubahsuaian pada kamus tempatan lalai , kerana ia mungkin tidak menggambarkan perubahan yang dibuat dalam panggilan exec().

Atas ialah kandungan terperinci Bagaimanakah Gelagat Fungsi `exec` Berbeza dalam Python 2 dan Python 3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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