装饰器
它允许你修改函数或类的行为,而不更改其源代码。实质上,装饰器是接受另一个函数作为参数并返回一个包装原始函数的新函数。这样,你可以在不修改原始函数的情况下,添加一些额外的功能或逻辑。
def time_cost(func):""":return:"""def wrapper(*args, **kwargs):""":param args::param kwargs::return:"""start = int(time.time() * 1000)func(*args, **kwargs)end = int(time.time() * 1000)print("call api time cost:%s ms" %(end - start))return wrapper
def ntimes(n):def inner(f):def wrapper(*args, **kwargs):for _ in range(n):rv = f(*args, **kwargs)return rvreturn wrapper
return inner#然后你可以使用上述函数包装另一个函数,例如前文中的 add 函数:
@ntimes(3)
def add(x, y):print(x + y)
return x + y
Python中有许多内置的装饰器
例如@staticmethod、@classmethod、@property、@functools.lru_cache、@functools.singledispatch等。你还可以为不同的目的创建自己的自定义装饰器。
闭包函数
闭包函数就是定义在函数内部的函数,也就是函数的嵌套定义,根据字面意思理解,闭包函数有两个关键字闭和包分别是的封闭和包裹。需要注意的重点是:闭包函数的作用域关系在函数定义阶段就固定死了,与调用位置无关。
1.什么是闭包函数:一个函数的返回值是另外一个函数,返回的函数调用父函数内部的变量,如果返回的函数在外部被执行,就产生了闭包
2.闭包函数的作用:使函数外部能够调用函数内部放入属性和方法
3.闭包函数的优缺点:
优点:使函数外部能够调用函数内部放入属性和方法
缺点:闭包操作导致整个函数的内部环境被长久保存,占用大量内存
__closure__属性。Python给内部函数添加了这个属性来携带内部函数用到的外部函数中的变量。
闭包作用
数据隐藏
DRY 原则
闭包
闭包函数使用场景
- 封装:这种场景叫做封装。
- 内部函数可以方便的生成新的函数
- 装饰器:对Python至关重要。这也是内部函数的主要使用场景。