首页 > 代码库 > Python之装饰器
Python之装饰器
Python 高阶函数:
1.把一个函数名作为实参传递给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
2.返回值中包含函数名(不修改函数的调用方式)
def test1(): print("in the test1") def test2(func): #接收函数名 func() print("in the test2") return func #返回函数内存地址 def test3(): str = test2(test1) #函数名test1 作为实参传递给函数 test2,并接收test1的 内存地址赋值给str print(str) print("in the test3") test3()
Python 嵌套函数:
在函数当中再定义函数。
def test1(): pirnt("in the test1") def test2(): print("in the test2")
高阶函数 + 嵌套函数 => 装饰器
装饰器,在不修改源代码的基础上新增功能,并在不改变调用方式的前提下,实现功能添加,代码实现如下:
import time def timer(func): def deco(*args, **kwargs): start_time = time.time() func(*args, **kwargs) stop_time = time.time() print("the func run time %s"% (stop_time-start_time)) return deco @timer #test1 = timer(test1) def test1(): time.sleep(1) print("in the test1") @timer def test2(name): time.sleep(1) print("name: ", name) #test1 = timer(test1) #获取的deco的内存地址,所以执行test1(),实际上就是执行deco() test1() #deco() # @timer 分解步骤如下 test2 = timer(test2) # 把deco的内存地址给了test2,所以执行test2(),实际上就是执行deco() print("test2: ", test2) test2("lilei") #deco("lilie")
import time username = "alex" password = "abc123" def auth(mode): def out_wrapper(func): def wrapper(*args, **kwargs): if mode == "local": start_time = time.time() rec =func(*args, **kwargs) stop_time = time.time() print("the func run time is %s"% (stop_time-start_time)) return rec elif mode == "ldap": print("in the ldap") start_time = time.time() rec = func(*args, **kwargs) stop_time = time.time() print("the func run time is %s" % (stop_time - start_time)) return rec return wrapper return out_wrapper def index(): print("Welcome in the index page") @auth(mode="local") # home=wrapper() def home(name): print("in the home", name) return "from home" #@auth(mode="ldap") def bbs(): print("in the bbs") index() home("alex") # @auth(mode="ldap") 分解步骤如下 #out_wrapper = auth(mode="ldap") # 把 out_wrapper 内存地址给了 out_wrapper # print("aa:", out_wrapper) #bbs = out_wrapper(bbs) # 把 wapper 的内存地址给了bbs,所以执行bbs(),实际上就是执行wapper(), bbs = auth(mode="ldap")(bbs) #两步整合的结果: bbs = auth(mode="ldap")(bbs) print("bbs:", bbs) bbs()
本文出自 “学海无涯” 博客,请务必保留此出处http://tofgetu.blog.51cto.com/12856240/1924377
Python之装饰器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。