Python的闭包和装饰器

什么是python闭包? ``` def a(n): x = 1 def b(): print(x) return n return b ``` 函数a中包含了函数b 因为函数b能够访问自己作用域以外的变量n,所以称之为闭包。 在此基础上 如果传入进来的是个函数。 ``` def a(f): def before_excute_f(): ''' do something before f excute ''' return f() return before_excute_f ``` 运行的顺序就是 这样会先运行函数a,然后再运行函数b, 最后运行函数f ``` @a def f(): pass ``` 那么装饰器的实际应用场景是什么呢? 如果工作中遇到例如登陆验证,或者log函数的运行时间,那么需要把这些公用的代码块抽象出来做成一个装饰器,提高代码复用率。 ``` def get_some_stuff(username, password): validate(username, password) pass def get_other_stuff(username, password): validate(username, password) pass ``` 如上两个函数都需要执行一个叫做validate的函数,此时我们可以考虑使用装饰器 ``` def validate(username, password) def validate_decorator(f): def wrapper(): return f(username, password) return wrapper return validate_decroptor ```

你可能感兴趣的:(Python的闭包和装饰器)