Dalam pengaturcaraan, kita selalunya perlu mengatur dan mengurus fungsi untuk pelaksanaan yang cekap. Satu pendekatan biasa ialah menyimpan fungsi dalam struktur data seperti senarai dan kamus, membolehkan kami merujuk dan menggunakan fungsi tersebut secara dinamik. Walau bagaimanapun, persoalan timbul: bagaimanakah kita boleh menyimpan dan mendapatkan semula fungsi secara berkesan dalam struktur ini?
Sebagai contoh, pertimbangkan pendekatan berikut:
<code class="python">mydict = { 'funcList1': [foo(), bar(), goo()], 'funcList2': [foo(), goo(), bar()]}</code>
Pendekatan ini cuba menyimpan hasil fungsi panggilan (iaitu, mengembalikan nilai) dalam kamus, tetapi ia tidak akan berfungsi seperti yang diharapkan. Sebaliknya, kita memerlukan cara untuk menyimpan sendiri objek fungsi sebenar.
Dalam Python, fungsi ialah objek kelas pertama, yang bermaksud ia boleh dianggap sebagai nilai dan disimpan dalam struktur data. Untuk menyimpan fungsi dalam kamus dengan berkesan, kita perlu menetapkan objek fungsi kepada kekunci, bukan nilai pulangannya. Contohnya:
<code class="python">dispatcher = {'foo': foo, 'bar': bar}</code>
di mana foo dan bar ialah objek fungsi.
Untuk memanggil fungsi daripada kamus ini, kami hanya memanggilnya menggunakan kekuncinya:
<code class="python">dispatcher['foo']() # calls the foo function</code>
Jika kita perlu menjalankan berbilang fungsi yang disimpan dalam senarai, kita boleh menggunakan fungsi pembantu untuk melelar melalui senarai dan menggunakan setiap fungsi:
<code class="python">dispatcher = {'foobar': [foo, bar], 'bazcat': [baz, cat]} def fire_all(func_list): for f in func_list: f() fire_all(dispatcher['foobar'])</code>
Pendekatan ini membolehkan kami mengatur dan menggunakan fungsi secara dinamik, memudahkan organisasi kod dan mengurangkan bilangan pernyataan def yang diperlukan.
Atas ialah kandungan terperinci Bagaimanakah kita boleh menyimpan dan mendapatkan semula fungsi dalam struktur data seperti senarai dan kamus dengan berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!