标签:它的 pre property oba cto out 计算机科学 **kwargs 本地
??条件1. 接受一个或多个函数作为参数
??条件2. 输出一个函数
举例:
def counter(base): def inc(step=1): nonlocal base #修改外部变量base,赋值需要nonlocal base += step return base return inc foo = counter(5) foo1 = counter(5) print(foo == foo1) #False print(id(foo),foo) print(id(foo1),foo1)
举例:
?? 有这样一个add函数
??? def add(x,y): #柯里化成 add(x)(y) 的格式 ??? ?return x + y
将此函数柯里化
def add(x): def _add(y): return x + y return _add foo = add(7) #等同于 add(7)(8) print(foo(8))
举例:
def logger(fn): def _logger(*args,**kwargs): print(‘before‘) ret = fn(*args,**kwargs) print(‘after‘) return ret return _logger @logger # add = logger(add) def add(x,y): return x + y print(add(5,600))
举例:
import functools import datetime import time def copy_property(src): def _copy_property(dst): dst.__name__ = src.__name__ dst.__doc__ = src.__doc__ #dst.__qualname__ = src.__qualname__ #限定名 return dst return _copy_property def timeoutTip(t): def logger(func): #@functools.wraps(func) @copy_property(func) def wrapper(*args, **kwargs): ‘‘‘test2‘‘‘ # before 功能增强 start = datetime.datetime.now() # print(‘Call:{}() StartTime:{} nowDescription:{}‘.format(func.__name__,start,func.__doc__),end=‘\t\t‘) print(‘Call:{}()‘.format(func.__name__), end=‘\t\t‘) ret = func(*args,**kwargs) # after 功能增强 stopTime = (datetime.datetime.now() - start).total_seconds() if stopTime > t: print(‘Timeout time:{} ‘.format(stopTime)) return ret # copy_property(func, wrapper) return wrapper return logger @timeoutTip(2) #带参装饰器与不带参装饰器的区别 def add(x,y): ‘‘‘test1‘‘‘ #time.sleep(3) print(‘returnValue = x+y‘) return x+y print(add(100,y=200)) print(add.__doc__,add.__qualname__)
标签:它的 pre property oba cto out 计算机科学 **kwargs 本地
原文地址:http://www.cnblogs.com/i-honey/p/7712159.html