版权声明:转载注明出处 https://blog.csdn.net/qq_19428987/article/details/86583695
lambda 表达式
lambda表示是一个匿名函数,仅仅是一个表达式,可以一个或者多个参数(中间采用逗号隔开),lambda表达式没有返回值
fun=lambda x:x**3 #求x的三次方
print(fun(3))
>>27
高阶函数
把函数作为参数的使用的函数叫高阶函数(类似C#中多重函数调用)
def funA(x):
return x*10
def funB(n,fun):
return fun(n)*3
print(funB(5,funA))
>>> 150
上列中将函数funA作为参数传入,在funB中可以直接调用,不用直接去访问函数
系统高阶函数-map
map函数(映射),把集合或者列表中的每一个元素按照一定规则操作,并返回新的列表或者集合。map(函数或lambda表达式,可迭代对象)。例如:将一个列表中的每个元素乘以10,并得到新的列表:
l=[i for i in range(10)]
l_2=map(lambda x:x*10,l)
for i in l_2:
print(i)
系统高阶函数-reduce
- 把一个迭代对象归并成一个结果
- 对于作为参数的函数必须要有两个参数,必须要有返回值
- 需要导入functools包。
例子:
from functools import reduce
def add(x,y):
return x+y
l=[i for i in range(10)]
sum=reduce(add,l)
print(sum)
>>> 45
filter 过滤函数
对一组数据进行过滤,符合条件的数据会生成一个新的数据
- 返回值为布尔类型
- 调用格式:filter(f,data),其中f为过滤函数,data为数据
def isEven(n):
return n%2==0
l=[i for i in range(10)]
even=filter(isEven,l)
for i in even:
print(i)
# 这里将会依次打印0~8
高阶函数-排序
把一个序列按照给定的算法来进行排序
- 对每个函数进行key函数运算,按照key函数定义的逻辑来排序
- 特别注意Python2和Python3差别很大
#按照绝对值大小排序
l=[-12,58,-65,78,80]
b=sorted(l,key=abs,reverse=False)
print(b)
>>> [-12, 58, -65, 78, 80]
闭包-closure
- 当一个函数在函数内部定义函数,内部的函数应用外部的函数参数或者局部变量,当内部函数被当做返回值时,相关参数和返回值保存在相关函数中,这种结果叫闭包
def count():
def f(j):
def g():
return j*j
return g
fs=[]
for i in range(1,4):
fs.append(f(i))
return fs
fun=count()
for i in fun:
print(i())
# 输出 1\n 4\n 9
装饰器-Decorator
- 在不改动代码的情况下,无限制扩展函数功能的机制,本质上讲是返回函数的高阶函数
- 装饰器的使用:在每次要到扩展函数前使用@+函数名
def debug(func):
def wrapper(*args, **kwargs): # 指定宇宙无敌参数
print("[DEBUG]: enter {}()".format(func.__name__))
return func(*args, **kwargs)
return wrapper # 返回
@debug
def say(something):
print("hello {}!".format(something))
say("Box")
>>>[DEBUG]: enter say()
hello Box!
偏函数
- 参数固定,相当于一个特定参数的函数体
- 需要引入 functools. partial,相当于把函数的参数固定
from functools import partial
int16=partial(int,base=16)
print(int16("255"))
>>> 597