map的用法
deffn(x):
returnx*2
L1 = [1,2,3,4,5,6]
L2 = list(map(fn,L1))
L2
[2,4,6,8,10,12]
通过上面的运行,可以知道map就是把一个数组内所有的元素都执行map加入的方法。
用法如下 map(方法,数组)
reduce的用法
先看例子
fromfunctoolsimportreduce
defadd(x,y):
returnx + y
L1 = [1,2,3,4,5,6]
L2 = reduce(add,L1)
L2
通过上面的例子,直观的来看,我们可以发现reduce和map方法有一些不一样。
map是python自带的函数,而reduce需要引入functools
map 返回的是一个map对象,而reduce是返回的一个数字
map函数需要一个参数,而reduce的参数需要两个。
map是对一个集合中的每个元素执行指定的方法。而reduce则是依次对集合的元素调用指定的方法。先把前两个参数执行reduce以后形成的返回之作为第一个参数,再和第三个参数形成返回值,依次执行。
filter函数
filter则是对集合的每个元素执行一次判断,能让filter指定的函数返回真值则返回,否则则不出现在返回集合中。
deffn(x):
returnx%2==
L1 = [1,2,3,4,5,6,7,8]
F1 = filter(fn,L1)
print(F1)
print(list(F1))
sorted
顾名思义排序。用法如下
sorted(集合,key=排序的算法,reverse=True) #reverse=True如果添加反向排序
返回函数(闭包)
deffn(x):
defadd(y):
returnx + y
returnadd
a = fn(5)
a(6)
需要注意的是闭包的代码是到最后执行a(6)的时候,才调用了函数里面的执行。举个例子
deffn():
rs = []
foriinrange(4):
defsub():
returni
rs.append(sub)
returnrs
a,b,c,d = fn()
print(a())
print(b())
print(c())
print(d())
从上面的例子中,我们如果没有理解到返回的函数是在最后加上括号的时候才调用,可能以为返回之是0,1,2,3
但是实际上def sub()里面的内容一直都没执行,但是外面的i 一直到了3.当调用a()的时候。开始执行。所以如上面的返回结果。
defefn():
i =1
defsub():
i = i +1
returni
returnsub
t = efn()
t()
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recentcalllast)
in()
7
8t = efn()
----> 9 t()
insub()
2i =1
3defsub():
----> 4 i = i + 1
5returni
6returnsub
UnboundLocalError:localvariable'i'referencedbeforeassignment
上面的报错,需要引入关键词nonlocal如下:
defefn():
i =1
defsub():
#关键字
nonlocali
i = i +1
returni
returnsub
t = efn()
print(t())
print(t())
匿名函数
list(map(lambdax: x * x, [1,2,3,4,5,6,7,8,9]))
[1,4,9,16,25,36,49,64,81]
通过上面的式子我们简单可以看到lambda函数或者匿名函数的意义
f = lambda x,y:x + y
f(5,6)
我们大概可以看到lambda函数的:前面相当于参数,后面的是返回数值
装饰器
我的理解类似java中的AOP或者.net中的面向切片编程
'''比如调用一个方法的时候,我们期望另外一个方法也被调用。比如我们执行一个操作,期望不改变任何代码,就可以打印出来这个方法的日志'''
deflog(func):
defwraper(*args,**kw):
print(func.__name__+' is call to log')
returnfunc(*args,**kw)
returnwraper
@log
deffn():
print('this is fn')
fn()
fniscalltolog
thisisfn
''' 如果我们希望往log里面传递参数'''
deflog(text):
defdecorator(func):
defwraper(*args,**kw):
print(func.__name__+' is call to log '+ text)
returnfunc(*args,**kw)
returnwraper
returndecorator
@log('hello')
deffn():
print('fn')
fn()
fn.__name__
fniscalltologhello
fn
'wraper'
fn的名称发生了改变,要保持不变,需要@functools.wraps(func)
''' 如果我们希望往log里面传递参数'''
importfunctools
deflog(text):
defdecorator(func):
@functools.wraps(func)
defwraper(*args,**kw):
print(func.__name__+' is call to log '+ text)
returnfunc(*args,**kw)
returnwraper
returndecorator
@log('hello')
deffn():
print('fn')
fn()
fn.__name__
fniscalltologhello
fn
'fn'
领取专属 10元无门槛券
私享最新 技术干货