lambda表达式(匿名函数):可以解决有时候函数很小很短,会造成浪费啰嗦,不利于读者阅读的普通函数缺点
s=lambda:x,y,z:x+y+z
s(1,2,3)
高阶函数:把函数作为参数使用
def funa(n):
return n*10
def funb(n):
return funa(n)*9
系统高阶函数map,扩大倍数
a=[i for i in range(1:10)]
def funa(n):
return n*10
b=map(funa,a)
for i in b:
print(i)
系统高阶函数reduce
from funtools import reduce
def add(x,y):
return x+y
#对列表进行归并操作
re=reduce(add,[1,2,3,4,5,6])
print(re)#21
系统高阶函数filter:过滤函数,对一组数据进行过滤,过滤函数要有输入,返回布尔值
#找出列表中的偶数
def iseven(a):
return a%2==0
l=[1,3,4,5,6,6,7,8]
res=filter(iseven,l)
print([i for i in res])
系统高阶函数sorted--排序
l=[13,23,664,665,1446,46,7,48]
al=sorted(l,reverse=True)
print(al) #从大到小排序
bl=sorted(l,key=abs,reverse=True) 先按绝对值排序,在倒序
asttr=["dada","swallow","dkDK","LIE"]
cl=sorted(asttr,key=str.lower)#按小写字母排序
cl=sorted(asttr)
闭包(closure):当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或局部变量,当内部函数作为返回值时,相关参数和变量保存在返回的函数中 ,返回的变量不能存在任何循环变量,否则会出问题
def funa(*args):
def funb():
re=0
for n in args:
re+=n
return re
return funb
fb=funa(1,2,3,45)
fb()
装饰器(Decrator):在不改动函数代码的情况下无限扩展函数的功能,本质上是一个返回函数的高阶函数
比如在打印hello的函数上扩展打印当前系统时间
import time
def printtime(f):
def wrapper(*args,**kwargs):
print("time",time.ctime())
return f(*args,**kwargs)
return wrapper
@printtime
def hello():
print("hello")
偏函数,参数固定的函数
import funtools
int("123",base=8) #把123改成八进制的数字
int16=funtools.partial(int,base=16)#固定为16进制
int16("1234")