def multiply_by(n): def multiplier(x): return n * x return multiplier # 使用闭包创建一个乘法器 times_5 = multiply_by(5) # 调用乘法器进行计算 result = times_5(10) # 输出50
multiply_by 関数は内部関数
multiplier を返し、内部関数は外部関数の変数にアクセスできます。関数
n。外部関数によって返された内部関数はクロージャを形成し、後続の呼び出しで使用できます。
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
counter 関数はローカル変数
count を定義し、内部関数
increment を返します。内部関数が呼び出されるたびに、カウンタは 1 ずつインクリメントされ、現在のカウント値が返されます。
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
memoize 関数は関数をパラメータとして受け取り、内部関数
wrapper を返します。内部関数は、辞書
cache を使用して計算結果を保存します。呼び出されるたびに、まず対応する結果がキャッシュ内にあるかどうかがチェックされます。存在する場合は、直接戻ります。そうでない場合、結果は次のようになります。計算されてキャッシュされます。
以上が関数型プログラミングにおけるクロージャの実際的な使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。