一、匿名函数
如题,匿名函数,直白点,就是没有具体名称的函数,但是不影响函数本身的使用。
作业:使用匿名函数改造下面的代码
def is_odd(n):
return n % 2 == 1
L = list(filter(is_odd, range(1, 20)))
如下
L = list(filter(lambda n : n%2 == 1, range(1,20)))
二、装饰器(decorator)
本身是对函数进行装饰的能力,在不改变已有函数代码的前提下,给函数“装饰”新增的功能。
2.1 .name
函数的内置属性,表示函数的名称
def now() :
print(1)
now.__name__ // "now"
2.2 @
语法 :
def 函数 A(function ()){
}
@A
def 函数B
表示将@下面的函数,作为参数传给@后面的函数,进行执行,明白这个才能进行下一个
2.2 decoreate
现在要在now函数中,增加一个打印的功能,比如开始打印和结束打印,就是需要在目标函数的执行开始和执行结束增加功能装饰。
作业1,给目标函数打印执行时间
def log(fn):
def decorete(*x,**y):
print('%s 执行了 %2f ms' % (fn.__name__, 11.567))
fn(*x,**y)
return decorete
@log
def a(x,y):
print('%d + %d = %d'%(x,y,x+y))
作业2:请编写一个decorator,能在函数调用的前后打印出’begin call’和’end call’的日志
def log(fn):
def decorete(*x,**y):
print('begin called %s' % fn.__name__)
f = fn(*x,**y)
print('end called %s' % fn.__name__)
return f
return decorete
@log
def a(x,y):
print('%d + %d = %d'%(x,y,x+y))
三、偏函数
直白点,就是优雅的帮我们节省代码
import functools
int2 = functools.partial(int)
int2(2.3) // 2
和上面装饰器不同的是,他是返回一个新的函数,不会对原函数进行操作
这个文档更详细偏函数