zoukankan      html  css  js  c++  java
  • python 闭包(使用装饰器)

    
    https://zhuanlan.zhihu.com/p/44667584
    
    #1 闭包+装饰器
    def cache(func):
        amizedata = {}    # 闭包,这个值一直在
        def wrapper(*args, **kwargs):
            key = f'{func.__name__}-{str(args)}-{str(kwargs)})'
            print(amizedata)
            if key in amizedata:
                result = amizedata.get(key)
                print('cached')
            else:
                result = func(*args, **kwargs)
                amizedata[key] = result
                print('calculated')
            return result
        return wrapper
    
    @cache
    def rectangle_area(length, width):
        return length * width
    
    rectangle_area(2, 3)
    # calculated
    # 6
    
    rectangle_area(2, 3) # amizedata = {'rectangle_area-(2, 3)-{})': 6}
    # cached 
    # 6
    
    
    
    #2 普通函数
    def rectangle_area2(length, width):
        amizedata = {}   # 不是闭包,这个值销毁
        key = f'{str(length)}-{str(width)})'
        print(amizedata)
        if key in amizedata:
            result = length * width
            print('cached')
        else:
            result = length * width
            amizedata[key] = result
            print('calculated')
        return result
    
    rectangle_area2(2, 3)
    # calculated
    rectangle_area2(2, 3)   
    # calculated
    
    
  • 相关阅读:
    占位博客
    占位博客
    占位博客
    占位
    占位
    占位
    占位
    占位
    python字典设置初始值setdefault()与get()
    自然语言处理如何入门
  • 原文地址:https://www.cnblogs.com/amize/p/14592902.html
Copyright © 2011-2022 走看看