Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kita Boleh Mensimulasikan Pembolehubah Statik dalam Fungsi Python?
Dalam C/C, pembolehubah statik memainkan peranan penting dalam mengekalkan nilai merentas seruan fungsi. Python, bagaimanapun, tidak mempunyai persamaan yang jelas dengan konsep ini. Oleh itu, bagaimanakah kita boleh melaksanakan pembolehubah statik dengan berkesan dalam fungsi Python?
Pendekatan idiomatik Python melibatkan memanipulasi pembolehubah peringkat kelas. Ini boleh dicapai dengan mentakrifkan kelas yang merangkum fungsi dan keadaan yang berkaitan. Walau bagaimanapun, dalam senario di mana penggunaan kelas tidak diingini, kaedah alternatif mesti digunakan.
Satu penyelesaian melibatkan memanfaatkan ruang nama fungsi, seperti yang digambarkan di bawah:
def foo(): if not hasattr(foo, "counter"): foo.counter = 0 foo.counter += 1 print("Counter is %d" % foo.counter)
Coretan kod ini mentakrifkan pembilang dalam ruang nama fungsi, memastikan ia berterusan merentasi panggilan. Walau bagaimanapun, ia memerlukan pemulaan yang jelas apabila seruan pertama.
Untuk pendekatan yang lebih ringkas dan disesuaikan, penghias boleh digunakan. Penghias berikut mencipta pembolehubah statik dan memulakannya berdasarkan hujah kata kunci yang ditentukan:
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
Penghias ini boleh digunakan seperti berikut:
@static_vars(counter=0) def foo(): foo.counter += 1 print("Counter is %d" % foo.counter)
Dengan memanfaatkan penghias ini, pemulaan balas kod boleh diletakkan di bahagian atas definisi fungsi, memberikan pelaksanaan yang lebih intuitif dan boleh dibaca.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Mensimulasikan Pembolehubah Statik dalam Fungsi Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!