Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa tidak menjalankan Kemas Kini Pembolehubah Tempatan dalam Python 3, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa tidak menjalankan Kemas Kini Pembolehubah Tempatan dalam Python 3, dan Bagaimana Saya Boleh Membetulkannya?

Linda Hamilton
Lepaskan: 2024-12-14 20:20:11
asal
790 orang telah melayarinya

Why Doesn't exec Update Local Variables in Python 3, and How Can I Fix It?

Cara Mengemas kini Pembolehubah Tempatan Menggunakan exec dalam Python 3

Masalah:

Apabila menggunakan exec dalam Python 3 untuk dilaksanakan rentetan kod dalam fungsi, pembolehubah tempatan dalam fungsi tidak dikemas kini. Isu ini timbul kerana pengoptimuman Python 3 yang cekap bagi storan pembolehubah setempat.

Contoh:

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

f()
Salin selepas log masuk

Kod ini dijangka mencetak 3 tetapi sebaliknya mencetak 1.

Penyelesaian:

Untuk mengubah suai setempat pembolehubah menggunakan exec, kamus tempatan eksplisit mesti diluluskan. Ini boleh dicapai seperti berikut:

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

Penjelasan:

Python 3 menyimpan pembolehubah tempatan dalam tatasusunan untuk mengoptimumkan aksesnya. Walau bagaimanapun, tingkah laku lalai exec tidak membenarkan pengubahsuaian pembolehubah tempatan. Dengan menghantar kamus tempatan yang eksplisit, pembolehubah boleh diberikan kepada kamus dan nilai diubah suainya boleh diakses melaluinya.

Python 2 vs Python 3:

Dalam Python 2, tingkah laku ini berfungsi seperti yang diharapkan disebabkan oleh mekanisme pengoptimuman yang membenarkan fungsi dengan exec mempunyai storan pembolehubah tempatan yang tidak dioptimumkan. Walau bagaimanapun, dalam Python 3, pengoptimuman ini tidak lagi mungkin, membawa kepada gelagat yang diperhatikan.

Nota:

Adalah penting untuk diingat bahawa menghantar kamus tempatan yang eksplisit harus hanya dilakukan apabila perlu, kerana ia mengalih keluar faedah pengoptimuman yang ditawarkan oleh pengendalian lalai Python 3 bagi pembolehubah tempatan.

Atas ialah kandungan terperinci Mengapa tidak menjalankan Kemas Kini Pembolehubah Tempatan dalam Python 3, dan Bagaimana Saya Boleh Membetulkannya?. 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