python自学笔记(6)--Python函数式编程、函数的装饰器、递归
来源:互联网 发布:php基础知识测试题 编辑:程序博客网 时间:2024/06/05 18:30
python自学笔记(6)--Python函数式编程、函数的装饰器、递归
filter过滤器函数
为已知的序列的每个元素调用布尔函数,调用中返回值为非零值(True)的元素将被添加到一个新的列表中。Python2.x直接返回列表,而3.x返回的是一个obj对象,需要主动转换为list列表。
def f1(x) : if x >30: return True else: return Falsel1 = [1,23,45]print(list(filter(f1,l1)))#[45]
*********************
import osdef f1(string) : '''查找内部含有'git'字符串''' if string.find('git') != -1: return True else: return Falsepath = os.getcwd()l1 = os.listdir(path)if "test" in l1: os.chdir(path + '//' + 'test') l2 = os.listdir(os.getcwd()) print(list(filter(f1,l2)))#查找所有test文件夹中,名字含有git的所有文件['git rebase.txt', 'git命令大全.jpg']
map()映射器 map(func,*list)
将两个列表中的对应元素映射成元组,可以对元素做一些处理后再映射。
l1 = [0, 1, 2, 3, 4, 5, 6]l2 = ['S','M','T','W','T','F','S','ddd']def f1(x,y): return str(x) + '-' + str(y)print(list(map(f1,l1,l2)))#['0-S', '1-M', '2-T', '3-W', '4-T', '5-F', '6-S']如果个数不等,多余的自动去除。
python的reduce()函数
reduce()函数也是Python内置的一个高阶函数。
reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
例如,编写一个f函数,接收x和y,返回x和y的和:
def f(x, y):
return x + y
调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:
先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
由于没有更多的元素了,计算结束,返回结果25。
上述计算实际上是对 list 的所有元素求和。虽然Python内置了求和函数sum(),但是,利用reduce()求和也很简单。
reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:
reduce(f, [1, 3, 5, 7, 9], 100)
结果将变为125,因为第一轮计算是:
计算初始值和第一个元素:f(100, 1),结果为101。
from functools import reduce#python3中将reduce移动至functools中l1 =(i for i in range(1,101))#生成器表达式f1 = lambda x,y:x+y#lambda运算符表达式print(reduce(f1,l1)) #求1到100的和为5050
函数的装饰器(增强器)#装饰器其实就是一个以函数作为参数并返回一个替换函数可执行函数。在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。本质上,decorator就是一个返回函数的高阶函数。可参考:http://python.jobbole.com/81683/
def outer(func): def inner(x): print('before!') func(x) print('after!') return inner@outerdef show_name(x): print(x)show_name('jimmy')
#before!#jimmy#after!
递归(据说python值允许递归998层):
def f1(x): return (x * f1(x -1) if x > 0 else 1)print(f1(10))#3628800是10的阶乘def f2(n): if n >= 2: return f2(n-1) + f2(n-2) elif n == 1: return 1 elif n <= 0: return 0l1 = [f2(i) for i in range(0,10)]print(l1)#斐波那契数列[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
函数的设计规范:
耦合性:
1. 通过参数接收输入,以及通过return产生输出以保证函数的独立性。
2. 尽量减少使用全局变量进行函数间通信。
3. 不要在函数中修改可变类型的参数。
4. 避免直接改变定义在另外一个模块中的变量。
聚合性:
1.每个函数都应该有一个单一的,统一的目标。
2.每个函数的功能都应该相对简单。
阅读全文
0 0
- python自学笔记(6)--Python函数式编程、函数的装饰器、递归
- python 装饰器的函数式编程
- 【Python学习笔记】函数式编程:装饰器
- python函数式编程(三)装饰器、偏函数
- python函数式编程中的装饰器
- python函数式编程之装饰器
- Python装饰器与函数式编程
- python函数式编程:匿名函数,装饰器,偏函数
- python 装饰器 递归函数 记录
- python如何装饰递归函数
- Python进阶笔记(2)_ 函数式编程 之 闭包和装饰器decorator
- 自学Python day5--------函数式编程(返回函数)
- python核心编程-函数-装饰器
- python元编程--装饰器函数
- 自学Python day4--------函数式编程
- PYTHON 函数装饰器
- python 函数装饰器
- Python函数:装饰器
- 前端 点击弹窗确定取消
- laravel 数据查询(集合)
- PHP把下划线分隔命名的字符串转换成驼峰式命名方式(带10万次执行效率测试结果)
- 用java序列化和阻塞IO模型实现RPC
- Java Socket实现文件传输
- python自学笔记(6)--Python函数式编程、函数的装饰器、递归
- 分库分表框架cobar,cobar-client,tddl,sharding-JDBC
- 修改tomcat的端口与部分中文乱码
- Spark Streaming——Checkpoint
- 第5章 运算符
- web开发从入门到放弃
- MFC——调用C#生成的DLL文件(动态库)
- 确定性能测试点的技巧
- HDU 4802