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
Linda Hamiltonasal
2024-12-14 20:20:11793semak imbas

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()

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)

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!

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