闭包函数 装饰器 有参装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包函数 装饰器 有参装饰器相关的知识,希望对你有一定的参考价值。

闭包函数

1 内部函数

2 包含对外部作用域而非全局作用域的引用
闭包函数的特点:
      自带作用域
       延迟计算

 

 #闭包函数定义
1
def timmer(func): 2 def inner(*args,**kwargs): 3 re = func(*args,**kwargs) 4 return re 5 return inner 6 7 index(): 8 print("hello") 9 10 index = timmer(index) #index == inner 11 index() #index()==inner()

 

 

装饰器

 

一:开放封闭原则,对扩展是开放的,对修改是封闭的

 

二:装饰器,装饰器本质可以任意可调用对象,被装饰的对象也可以是任意
可调用对象,
装饰器的功能是:
在不修改被装饰对象源代码以及调用方式的前提下为期添加新功能

 

原则:
    1.不修改源代码
    2.不修改调用方法
    目标:添加新功能

 

 1 #装饰器的语法:在被装饰对象的正上方的单独一行,@装饰器名字
 2 import time
 3 import random
 4 #装饰器
 5 def timmer(func):
 6      def wrapper():
 7          start_time = time.time()  #添加的计算时间功能
 8          func()
 9          stop_time=time.time()
10          print(run time is %s %(stop_time-start_time))
11      return wrapper
12 
13 #被装饰函数
14 @timmer      #index=timmer(index)  #index == wrapper
15 def index():  #index()== wrapper()
16      time.sleep(random.randrange(1,5))
17      print(welecome to index page)
18 
19 @timmer      #home=timmer(home)  #home==wrapper
20 def home():  
21      time.sleep(random.randrange(1,3))
22      print(welecome to HOME page)
23 
24 index() #wrapper()
25 home() #wrapper()

 

 

有参装饰器

 

 1 def deco(auth_type=file):
 2     def auth(func):
 3         def wrapper(*args,**kwargs):
 4             if auth_type == file:
 5                 print(文件的认证方式)
 6             elif auth_type == ldap:
 7                 print(ldap认证方式)
 8             elif auth_type == mysql:
 9                 print(mysql认证方式)
10             else:
11                 print(不知到的认证方式)
12         return wrapper
13     return auth
14 
15 @deco(auth_type=abc) #@auth #index=auth(index)
16 def index():
17     print(welecome to index)
18 
19 @deco(auth_type=ldap)
20 def home(name):
21     print(welecome %s to home page %name)
22 
23 index()
24 
25 home(egon)

 

以上是关于闭包函数 装饰器 有参装饰器的主要内容,如果未能解决你的问题,请参考以下文章

9.装饰器

装饰器

python之函数装饰器

Python基础闭包函数装饰器

python之装饰器

Python学习————python基础复习