Fork me on GitHub

python3函数式编程:匿名函数、高阶函数、装饰器

匿名函数

关键字:lambda (本质:表达式)

普通函数

1
2
def add(x,y):
return x+y

匿名函数命名:

1
lambda x,y: x+y

匿名函数冒号后面只能是表达式

三元表达式

条件为真时返回的结果 if 条件判断 else 条件为假时返回结果

1
2
3
4
x = 2
y = 1
r = x if x > y else y

map类

1
2
3
4
5
6
7
8
9
list_x = [1,2,3,4,5,6,7,8 ]
def square(x):
reyurn x * x
r = map(square, list_x)
print(list(r))
Result:[1,4,9,16,25,36,49,64]
#执行for循环
#map和匿名函数结合使用
r = map(lambda x: x*x, list_x)

map的结果列表长度取决于两组列表中最短列表的长度

reduce 函数

1
2
3
4
5
6
7
8
9
from functools import reduce
#连续计算, 连续调用lambda
#reduce必须有两个参数
list_x = [1,2,3,4,5,6,7,8]
r = reduce(lambda x,y: x+y, list_x)#第三个参数的属性为初始值
print(r)
Result: 36
# 运行规则 在没有传入y值时,会将x的前两个值作为x和y,进行计算。
# (((1+2)+3)+4)+5

filter类 过滤

1
2
3
4
5
# 消除所有的0
list_x = [1,0,1,0,0,1]
r = filter(lambda x: True if x==1 else False,list_x) / filter(lambda x: x,list_x)
print(list(r))
Result: [1,1,1]

装饰器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 多个函数打印当前时间
# 原则:对修改式封闭的 对扩展式开放的
# 装饰器 (模式)增加功能 函数内部不修改
import time
def decorator():#装饰器外部实现函数
def wrapper():
print(time.time())
return wrapper
@decorator #语法糖
def f1():
print('This is a function')
f = decorator(f1)
f1() 调用不变
f()
1
2
3
4
5
6
7
8
9
10
11
# 装饰器decorator 完整形态
import time
def decorator(func):
def wrapper(*arga,**kw):
print(time.time())
func(*args,**kw)
return wrapper
# args 可变参数
# kw 关键字参数
@decorator
-------------本文结束 感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!