python闭包及实例应用

闭包是指在函数中定义的函数,并且这个内部函数可以访问到外部函数中的变量。具体来说,在一个函数中定义了另一个函数,并且内部函数使用了外部函数的变量,那么这个内部函数就是一个闭包。

闭包的特点是可以“记住”它被定义时的环境,即使该环境已经不存在了,并且在后续调用时可以使用这些记住的变量。

下面是6个示例说明闭包的实际应用:

1. 缓存:

def cache():
    data = {}

    def get(key):
       return data.get(key, None)

    def set(key, value):
       data[key] = value
       return get, set   
       
get_func, set_func = cache()
set_func('name', 'Alice')
print(get_func('name'))  # 输出: Alice


2. 计数器:

def counter():
    count = 0
          
    def increment():          
        nonlocal count        
        count += 1       
        return count
    
    return increment
   
counter_func = counter()  print(counter_func())  # 输出: 1
print(counter_func())  # 输出: 2


3. 延迟执行:

def lazy_sum(a, b):
    def sum():
        return a + b
    return sum
sum_func = lazy_sum(1, 2)
print(sum_func())  # 输出: 3


4. 装饰器:

def logger(func):
    def wrapper(*args, **kwargs):
        print('Calling function:', func.__name__)  
        return func(*args, **kwargs)
    return wrapper

@logger
def add(a, b):
    return a + b

print(add(1, 2))  # 输出: Calling function: add; 3 


5. 封装私有变量:

def private_var(initial_value):
    var = initial_value
    
    def get_var():       
        return var

    def set_var(new_value):
        nonlocal var
        var = new_value     

    return get_var, set_var

get_func, set_func = private_var(5)
print(get_func())  # 输出: 5
set_func(10)   
print(get_func())  # 输出: 10


6. 制作计时器:

import time

def timer():
    start_time = time.time()

    def get_elapsed_time():
        return time.time() - start_time

    return get_elapsed_time

timer_func = timer()
time.sleep(2)   
print(timer_func())  # 输出: 大约2.0  


这些示例展示了闭包在缓存、计数器、延迟执行、装饰器、封装私有变量和制作计时器等场景中的应用。通过使用闭包,可以方便地实现一些功能,并且良好地封装变量,提高代码的可读性和可维护性。

你可能感兴趣的:(python3,python)