码迷,mamicode.com
首页 > 其他好文 > 详细

函数——装饰器

时间:2019-05-23 23:23:43      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:pen   条件   ack   源代码   调用   inner   int   tar   return   

1.闭包函数:

闭包=内部函数+定义函数时的环境

def outer():

  x=10

  def inner():         条件一:inner 是内部函数

          print(x)       条件二:外部的一个环境变量

  return inner        内部函数innner就是一个闭包

 

2.装饰器(decrator)  为你之前的函数(程序)添加新的功能,而不修改源代码

 

举例:

import time
# f() #函数的调用方式不能改变,永远是f()的方式调用

#在不改变原函数代码的基础上,增加功能——用函数的方法

# def show_time(func):
# start=time.time()
# func()
# end=time.time()
# print("spend=%s"%(end-start)) #占位符的表示
#
#
# show_time(f) #这种方法改变了函数的调用方式,不行


##z装饰器的使用:
def show_time(func):
def inner(): ## 这里形成了一个闭包函数 innner内部函数
start=time.time()
func() func外部变量
end=time.time()
print("spend=%s"%(end-start)) #占位符的表示
return inner #返回的是innner的内存地址


@show_time ##这就是装饰器zaipython中的表达形式 == f=show_time(f),紧跟函数,在函数前面,实现在不改变函数源代码的前提下对函数功能的添加
def f():
print("hello world")
time.sleep(3)
# f=show_time(f)
!!!inner函数的形式必须与你所修改的函数的形式是一致的,比如f()--inner f(x)--inner(x)
f() 最终的调用形式并没有发生改变,却实现了函数功能的增加

函数——装饰器

标签:pen   条件   ack   源代码   调用   inner   int   tar   return   

原文地址:https://www.cnblogs.com/For-CNE/p/10915038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!