一.lambda表达式
lambda表达式又被称为匿名函数,它的格式是:lambda 参数列表:函数体
def add(x,y):
return x+y
add_lambda=lambda x,y:x+y
上述add函数和add_lambda函数是等价的。
二.map函数
map函数的格式是:map(函数体,可迭代输入)
list1=[1,2,3,4,5]
r=map(lambda x:x+x, list1)
print(list(r))
#[2, 4, 6, 8, 10]
map函数也可以同时传入两个可迭代输入
list1=[1,2,3,4,5]
r=map(lambda x,y:x+y, list1, list1)
print(list(r))
#[2, 4, 6, 8, 10]
三.filter过滤器
filter的格式是:filter(function or None,iterable)
它只留下function允许的数据
def is_not_none(s):
return s and len(s.strip())>0
list2=[' ','','hello',None,'word']
res=filter(is_not_none, list2)
print(list(res))
#['hello', 'word']
四.reduce函数
reduce函数的格式是:reduce(函数体,可迭代输入)
该函数每次都用上一次的运算结果
from functools import reduce
list1=[1,2,3,4,5]
f=lambda x,y:x+y
res=reduce(f,list1)
print(res)
#15
五.闭包
闭包:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包。
def make_filter(keep):
def the_filter(filename):
file=open(filename)
lines=file.readlines()
file.close()
filter_doc=[i for i in lines if keep in i]
return filter_doc
return the_filter
filter1=make_filter('8')#此处filter1相当于函数the_filter,其中参数keep是8
filter_res=filter1('data.csv')
闭包可以保持当前的运行环境,以棋盘游戏为例:
origin=[0,0]
def create(pos=origin):
def game(direction,step):
new_x=pos[0]+direction[0]*step
new_y=pos[1]+direction[1]*step
pos[0]=new_x
pos[1]=new_y
return pos
return game
player=create()
print(player([1,0],10))
print(player([0,1],20))
print(player([-1,0],10))
#[10, 0]
#[10, 20]
#[0, 20]
六.装饰器无参数的装饰器
import time
def runtime(func):
def get_time():
print(time.time())
func()
return get_time
@runtime
def student_run():
print("学生跑")
student_run()
#1562483631.967822
#学生跑
@runtime表示将函数student_run作为参数输入到闭包函数runtime中只有一个参数的装饰器
import time
def runtime(func):
def get_time(i):
print(time.time())
func(i)
return get_time
@runtime
def student_run(a):
print("学生跑")
student_run(1)
#1562484351.06295
#学生跑有2个参数的装饰器
import time
def runtime(func):
def get_time(i,j):
print(time.time())
func(i,j)
return get_time
@runtime
def student_run(a,b):
print("学生跑")
student_run(1,2)
#1562484469.297142
#学生跑有多个参数的装饰器
import time
def runtime(func):
def get_time(*args):
print(time.time())
func(*args)
return get_time
@runtime
def student_run(*args):
print("学生跑")
student_run(1,2,3)
#1562484609.308905
#学生跑关键字参数的装饰器,例如:a=2
import time
def runtime(func):
def get_time(**kwargs):
print(time.time())
func(**kwargs)
return get_time
@runtime
def student_run(**kwargs):
print("学生跑")
student_run(a=2)无参数、可变参数、关键字参数的装饰器
import time
def runtime(func):
def get_time(*args,**kwargs):
print(time.time())
func(*args,**kwargs)
return get_time
@runtime
def student_run(*args,**kwargs):
print("学生跑")
student_run(1,2,a=2)
#1562484875.115825
#学生跑
参考文献: