Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah fungsi `exec` berkelakuan berbeza dalam Python 2 dan Python 3?

Bagaimanakah fungsi `exec` berkelakuan berbeza dalam Python 2 dan Python 3?

Patricia Arquette
Lepaskan: 2024-11-12 15:07:01
asal
656 orang telah melayarinya

How does the `exec` function behave differently in Python 2 and Python 3?

Gelagat Fungsi exec dalam Python 2 dan Python 3

Fungsi exec mempamerkan gelagat yang berbeza antara Python 2 dan Python 3. Dalam Python 2, exec ialah pernyataan, manakala dalam Python 3, ia telah beralih kepada fungsi. Perbezaan ini mempunyai implikasi yang ketara untuk interaksinya dengan pembolehubah tempatan.

Gelagat Python 2

Dalam Python 2, pernyataan exec membenarkan pengubahsuaian pembolehubah tempatan dalam skop fungsi. Apabila pernyataan exec dilaksanakan, pengkompil Python melumpuhkan sementara pengoptimuman skop tempatan dan beralih kepada strategi carian yang lebih perlahan untuk mengakses kedua-dua pembolehubah tempatan dan global. Selain itu, sebarang pembolehubah yang diisytiharkan dalam penyata exec akan disalin semula secara automatik ke locals fungsi jika tiada parameter global dan locals eksplisit disediakan.

Gelagat Python 3

Dalam Python 3, exec() fungsi mematuhi peraturan skop fungsi dengan ketat. Ia tidak lagi boleh mengubah suai pembolehubah dalam skop tempatan sesuatu fungsi, walaupun ia telah diisytiharkan sebelum ini. Locals() mampu mencerminkan pembolehubah setempat dalam satu arah, tetapi membenarkan pengubahsuaian melalui locals() tidak pernah disokong.

Penyelesaian Betul

Untuk mencapai tingkah laku yang diingini yang diperhatikan dalam Python 2, ia adalah perlu untuk menggunakan ruang nama yang berasingan apabila memanggil exec() dalam Python 3. Dengan menghantar kamus tersuai ke fungsi exec(), ia adalah mungkin untuk mengubah suai dan akses pembolehubah dalam ruang nama itu.

Kod Contoh

Kod berikut menunjukkan cara yang betul untuk menggunakan exec() dalam Python 3:

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

Pendekatan ini memastikan bahawa skop tempatan fungsi itu kekal utuh, sementara masih membenarkan pengubahsuaian pada pembolehubah dalam ruang nama yang ditentukan.

Atas ialah kandungan terperinci Bagaimanakah fungsi `exec` berkelakuan berbeza dalam Python 2 dan 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