Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mensimulasikan Pembolehubah Fungsi Statik dalam Python?
Masalah:
Bagaimanakah Python melaksanakan pembolehubah statik dalam fungsi, serupa dengan C/C ' s pembolehubah ahli statik ditakrifkan pada fungsi tahap?
Jawapan:
Dalam Python, tiada persamaan langsung untuk pembolehubah statik dalam fungsi. Walau bagaimanapun, kefungsian yang serupa boleh dicapai menggunakan gabungan fungsi bersarang dan penutupan:
def foo(): def counter(): if not hasattr(foo, "counter_value"): foo.counter_value = 0 foo.counter_value += 1 return foo.counter_value return counter
Di sini, fungsi foo() mentakrifkan pembilang fungsi bersarang(). Fungsi luar foo() berfungsi sebagai penutup untuk kaunter(), menyediakannya dengan ruang nama terpencil.
Untuk mengakses dan menambah kaunter, anda akan menghubungi:
counter = foo() counter() # Initializes the counter counter() # Increments the counter
Pendekatan Penghias:
Pendekatan lain ialah menggunakan penghias untuk mencipta statik pembolehubah:
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate @static_vars(counter=0) def foo(): foo.counter += 1 return foo.counter
Sintaks ini membolehkan anda memulakan dan mengakses pembolehubah statik dengan lebih mudah, tetapi ia memerlukan penggunaan foo. awalan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensimulasikan Pembolehubah Fungsi Statik dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!