python-4函数式编程
2024-10-21 09:58:40
1-高阶函数
变量可以指向函数。 def add(x, y, f): 例如f参数为函数
编写高阶函数,就是让函数的参数能够接收别的函数。
Python内建了map()
和reduce()高阶
函数。
1.1 将list每项相乘
def f(x):
return x*x
r = map(f, [1,2,3,4,5,6,7])
list(r) #[1, 4, 9, 16, 25, 36, 49] 每个变量的平方
1.2 把int转成字符串
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) #把int转成字符串
1.3 把str转换为int的函数:
from functools import reduce
def fn(x, y):
return x * 10 + y def char2num(s):
digits = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
return digits[s] print(reduce(fn, map(char2num, '')))把str转换为int的函数:
1.4 filter使用
def not_empty(s):
return s and s.strip()
list(filter(not_empty, ['A','B ','',None,'C',' ']))
1.5 sorted使用
print(sorted([1,22,33,21,8])) #默认排序
print(sorted(['a','Z','B','c'],key=str.lower)) #按小写排序
print(sorted(['a','Z','B','c'],key=str.lower,reverse=True)) #按小写反向排序 def my_Sorted(item):
return item[0]
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
sorted(L,key=my_Sorted) #自定义的排序
1.6 闭包
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs f1, f2, f3 = count() # 9 9 9 a,b,c = [1,2,3] #a=1,b=2,c=3
1.7 匿名函数 如: f= lambda x: x*x
list(map(lambda x: x*x, [1,2,3,4,5,6,7,8,9]))#[1, 4, 9, 16, 25, 36, 49, 64, 81]
1.8 装饰器 (装饰现有函数,返回一个新的函数。)
import functools
def log(func):
@functools.wraps(func) #相当wrapper.__name__ = func.__name__
def wrapper(*args,**kw):
print("call %s():" % func.__name__);
return func(*args, **kw)
return wrapper
@log
def now():
print('2018-05-11')
now() #相当 now = log(now)
带参装饰器
import functools
def log1(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s:' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator @log1('exceue')
def now1():
print('2018-5-5')
now1() #now = log('execute')(now)
#我们来剖析上面的语句,首先执行log('execute'),返回的是decorator函数,
#再调用返回的函数,参数是now函数,返回值最终是wrapper函数。
1.9 偏函数(通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点)
int('',base=2) #结果23, 以2进行进行转换 import functools
int2 = functools.partial(int, base=2)#自定义的偏函数
print(int2('')) #结果23,
最新文章
- mdadm设定RAID磁盘阵列,且当分区故障后如何重建
- 用JQuery仿造QQ头像裁剪功能
- spring结合Quartz的集群功能实现
- coreseek实战(二):windows下mysql数据源部分配置说明
- Oracle Undo与脏读解析
- MVC4 经典增删改查详情demo
- PHP基础知识之————PDO预处理语句
- UITabBar的隐藏
- JS函数的属性
- 基于python的二元霍夫曼编码译码详细设计
- Direcshow中视频捕捉和参数设置报告
- 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型
- Java:接口和抽象类,傻傻分不清楚?
- 【JS】使用变量作为object的key-方法汇总
- phpstorm中open in browser端口和路径设置
- Jenkins结合.net平台工具之Nuget
- Eclipse+maven 构建第一个简单的springmvc项目
- 网络协议理论,http协议,数据结构,常用返回码
- 关于package.json
- 使用 RestTemplate 调用 restful 服务