Penggunaan praktikal penutupan dalam pengaturcaraan berfungsi

WBOY
Lepaskan: 2024-01-13 15:15:06
asal
537 orang telah melayarinya

Penggunaan praktikal penutupan dalam pengaturcaraan berfungsi

Aplikasi praktikal penutupan dalam pengaturcaraan berfungsi memerlukan contoh kod khusus

Pengenalan

Penutupan ialah konsep penting dalam pengaturcaraan berfungsi Ini bermakna bahawa dalam fungsi bersarang, fungsi dalaman boleh diakses Pembolehubah fungsi luaran. Penutupan mempunyai pelbagai aplikasi praktikal dalam pengaturcaraan berfungsi, menjadikan kod lebih ringkas dan fleksibel, dan membolehkan beberapa fungsi lanjutan. Artikel ini akan memperkenalkan konsep penutupan dan aplikasi praktikalnya dalam pengaturcaraan berfungsi secara terperinci, dan memberikan contoh kod yang sepadan.

Definisi penutupan

Penutupan merujuk kepada situasi di mana pembolehubah fungsi luaran boleh diakses dari dalam fungsi dan boleh dipanggil dari luar fungsi. Dalam pengaturcaraan berfungsi, penutupan boleh dilaksanakan melalui sarang fungsi, di mana pembolehubah dari fungsi luar dirujuk dalam fungsi dalam.

Aplikasi praktikal penutupan

1. Pengiraan tertunda

Aplikasi biasa adalah untuk melaksanakan pengiraan tertunda. Menggunakan penutupan, kita boleh menangguhkan beberapa operasi pengiraan sehingga fungsi dipanggil. Berikut ialah contoh mudah:

def multiply_by(n):
    def multiplier(x):
        return n * x
    return multiplier

# 使用闭包创建一个乘法器
times_5 = multiply_by(5)

# 调用乘法器进行计算
result = times_5(10) # 输出50
Salin selepas log masuk

Dalam contoh ini, fungsi darab_dengan mengembalikan fungsi dalaman pendarab dan fungsi dalaman boleh mengakses pembolehubah fungsi luaran n. Fungsi dalam yang dikembalikan oleh fungsi luar membentuk penutupan dan boleh digunakan dalam panggilan seterusnya. multiply_by 函数返回了一个内部函数 multiplier,内部函数能够访问到外部函数的变量 n。外部函数返回的这个内部函数形成了闭包,并且可以在之后的调用中使用。

2. 计数器

闭包还可以用来实现计数器的功能。下面是一个示例:

def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

# 创建一个计数器
counter_1 = counter()

# 使用计数器
print(counter_1()) # 输出1
print(counter_1()) # 输出2
Salin selepas log masuk

在这个示例中,counter 函数定义了一个局部变量 count,并返回了一个内部函数 increment。内部函数每次调用时,会将计数器加1,并返回当前的计数值。

3. 缓存

闭包还可以用于实现缓存的功能。下面是一个示例:

def memoize(func):
    cache = {}
    def wrapper(*args):
        if args not in cache:
            cache[args] = func(*args)
        return cache[args]
    return wrapper

# 创建一个带缓存的函数
@memoize
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

# 调用带缓存的函数
print(fibonacci(10)) # 输出55
print(fibonacci(10)) # 不再计算,直接从缓存中取值,输出55
Salin selepas log masuk

在这个示例中,memoize 函数接受一个函数作为参数,并返回了一个内部函数 wrapper。内部函数使用一个字典 cache

2. Kaunter

Penutupan juga boleh digunakan untuk melaksanakan fungsi kaunter. Berikut ialah contoh:

rrreee

Dalam contoh ini, fungsi counter mentakrifkan pembolehubah setempat count dan mengembalikan fungsi dalaman increment . Setiap kali fungsi dalaman dipanggil, pembilang akan dinaikkan sebanyak 1 dan nilai kiraan semasa akan dikembalikan. 🎜🎜3. Caching 🎜🎜 Penutupan juga boleh digunakan untuk melaksanakan fungsi caching. Berikut ialah contoh: 🎜rrreee🎜Dalam contoh ini, fungsi memoize menerima fungsi sebagai parameter dan mengembalikan fungsi dalaman wrapper. Fungsi dalaman menggunakan kamus cache untuk menyimpan hasil yang dikira Setiap kali ia dipanggil, ia mula-mula menyemak sama ada terdapat hasil yang sepadan dalam cache, jika tidak, hasilnya dikira dan dicache. 🎜🎜Kesimpulan🎜🎜Penutupan mempunyai pelbagai aplikasi praktikal dalam pengaturcaraan berfungsi dan boleh digunakan untuk melaksanakan pengiraan tertunda, pembilang, cache dan fungsi lain. Dengan menggunakan penutupan, kami boleh menjadikan kod lebih ringkas dan fleksibel, serta dapat melaksanakan beberapa fungsi lanjutan. Melalui contoh kod khusus dalam artikel ini, saya berharap ia dapat membantu pembaca lebih memahami aplikasi praktikal penutupan dalam pengaturcaraan berfungsi. 🎜

Atas ialah kandungan terperinci Penggunaan praktikal penutupan dalam pengaturcaraan berfungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan