闭包和装饰器
2018-04-20 本文已影响11人
嶝a
什么是闭包?
各种专业文献的闭包定义都非常抽象,我的理解是: 闭包就是能够读取其他函数内部变量的函数。
"""
使用闭包完成装饰器的使用
"""
def logging(fn):
# 注意,闭包主要的左右是为装饰器传递参数
def inner(*keys,**kwargs):
print("开始记录日志了……")
fn(*keys,**kwargs)
print("结束日志记录……")
return inner
@logging
def login(username,password):
print("用户登录了")
print(username,password)
login(“x”,“xx”)
@logging
def register():
print("用户注册了")
register()

* 可以存一个可变参数 a
** 可变类型 a=1
装饰器我们在开发程序时要遵循(The Open-Closed Principle) OCP 开发封闭原则
o :开发扩展
c :关闭修改
p:封装变化
允许扩展功能 简单的说就是我们可以在原有的代码的基础上来增加更多的但不对已经使用的代码进行修改
def 新函数名(fn):#fn表示原先的方法
def 新函数名2(*k,**keys):#可变参数
#新的功能
#然后调用fn 变身原有的方法
fn(*k,**keys)
return 新函数名2