Dalam Python, meniru gelagat pembolehubah statik dalam fungsi, seperti yang dilihat dalam bahasa seperti C/C , mungkin pada mulanya kelihatan seperti tugas yang membingungkan. Walau bagaimanapun, terdapat beberapa pendekatan untuk mencapai fungsi ini.
Satu penyelesaian melibatkan penggunaan ruang nama fungsi itu sendiri. Dengan memberikan atribut kepada objek fungsi, kami mencipta pembolehubah statik dengan berkesan dalam skopnya. Pertimbangkan kod berikut:
def foo(): foo.counter += 1 print("Counter is %d" % foo.counter) foo.counter = 0
Pendekatan ini memulakan pembolehubah pembilang di luar fungsi dan memberikannya kepada ruang nama objek fungsi. Akibatnya, setiap panggilan ke foo() menambah pembilang dengan satu, mengekalkan keadaannya walaupun merentasi berbilang seruan.
Sebagai alternatif, anda boleh menggunakan fungsi penghias untuk mengautomasikan penciptaan pembolehubah statik. Penghias berikut, static_vars(), mengambil hujah kata kunci dan menetapkannya sebagai atribut fungsi yang dihias:
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
Menggunakan penghias ini, anda boleh menulis fungsi foo() seperti berikut:
@static_vars(counter=0) def foo(): foo.counter += 1 print("Counter is %d" % foo.counter)
Penghias memastikan pembolehubah pembilang dimulakan sekali dan kekal dikaitkan dengan foo() fungsi.
Walaupun kaedah ini mencontohi pembolehubah statik secara berkesan pada tahap fungsi, perlu diperhatikan bahawa tidak seperti dalam C/C , fungsi Python tidak terikat pada contoh objek tertentu. Oleh itu, foo. awalan diperlukan apabila mengakses pembolehubah statik, kerana ia masih dikaitkan dengan objek fungsi itu sendiri.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pembolehubah Statik dalam Fungsi Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!