柯里化定义:将原来接收2个参数的函数变成新的接受1个参数的函数的过程
柯里化之前:
def add(x,y):
return x+y
add(4,5)
柯里化之后:
def add(x):
def _add(y):
return x+y
return _add
add(4)(5)
运行结果:
9
装饰器:(无参数)
def logger(fn):
def _logger(*args,**kwargs):
print('before')
ret = fn(*args,**kwargs)
print('after')
return ret
return _logger
# logger(add)(4,5)
# add = logger(add)
# add(4,5)
@logger #@logger等价于add = logger(add),此处的add为@的下一行中第一个函数
def add(x,y):
return x+y
add(4,5)
运行结果:
before
after
Out[7]:
9
装饰器:(带参数)
def copy_attributes(src):
def wrapper(dst):
dst.__name__ = src.__name__
dst.__doc__ = src.__doc__
return dst
return wrapper
def logger(fn):
@copy_attributes(fn) #等价于:_logger = copy_attributes(fn)(_logger) ==> _logger = wrapper(_logger) ==> _logger=dst
def _logger(*args,**kwargs):
'''
this is a wrapper function
'''
print('before')
ret = fn(*args,**kwargs)
print('after')
return ret
return _logger
# logger(add)(4,5)
# add = logger(add)
# add(4,5)
@logger #@logger等价于:add = logger(add),此处的add为@的下一行中第一个函数
def add(x,y):
'''
This is a function for addtion
:param x: int
:param y: int
:return: int
'''
return x+y
print(add(4,5))
print(add.__name__)
print(add.__doc__)
运行结果:
before
after
9
add
This is a function for addition
:param x: int
:param y: int
:return: int