Python3函数式编程
Python函数式编程
函数式编程可以使代码更加简洁,易于理解。Python提供的常见函数式编程方法如下:
- map(函数,可迭代式)映射函数
- filter(函数,可迭代式)过滤函数
- reduce(函数,可迭代式)规约函数
- lambda函数
- 列表推导式
- zip()函数
1列表推导式
#list(range(1,11)) 结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
x = [item for item in range(1,8)]
print(x)
[1, 2, 3, 4, 5, 6, 7]
x = [item for item in range(1,8) if item % 2 == 0]
print(x)
[2, 4, 6]
area = [(x,y) for x in range(1,5) for y in range(1,5) if x!=y]
print(area)
[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
dict(area) # 采用字典对area列表打包,相同的键的元素,后面覆盖前面的键
{1: 4, 2: 4, 3: 4, 4: 3}
['The number: %s' % n for n in range(1,4)]
['The number: 1', 'The number: 2', 'The number: 3']
dict1 = {'1':'A','2':'B','3':'C','4':'D'}
[k + '=' + v for k, v in dict1.items()]
['1=A', '2=B', '3=C', '4=D']
2 lambda函数
- lambda 参数: 表达式(expression)
- 用于简单函数的定义
- 返回值就是函数体中的表达式的求值结果
lambda x,y: x*y
<function __main__.<lambda>>
(lambda x,y: x*y)(9,9)
81
f = lambda x,y: x/y
f(10,2)
5.0
3 map()函数
- map(function, iterable, ...)
- 返回结果为map迭代式
list(map(lambda x : x**3,[1,2,3,4]))
[1, 8, 27, 64]
list(map(lambda x,y:x+y, [1,2,3,4],[4,5,6,7]))
[5, 7, 9, 11]
4 reduce()函数
- reduce(函数,迭代式)
- 对迭代式中的元素按函数依次计算后返回唯一结果
from functools import reduce
reduce((lambda x,y:x+y), [1,2,3,4]) # 等价于 1+2+3+4
10
reduce((lambda x,y:x+y), [1,2,3,4], 90) # 等价于 90+1+2+3+4
100
reduce((lambda x,y:x/y), [1,2,3,4,5]) # 等价于 1/2/3/4/5=1/120
0.008333333333333333
5 filter()函数
- filter(函数, iterable)
- 如果第一个参数是一个函数,那么将第二个可迭代数据里的每一个元素作为函数的参数进行计算,把返回Ture的值筛选出来
- 过滤器的作用是过滤到我们不关心的数据,保留有用的数据
list(filter(None,[11,1,2,0,0,0,False,True]))
[11, 1, 2, True]
list(filter(lambda x:x%2, range(1,11)))
[1, 3, 5, 7, 9]
list(filter(lambda x: x.isalpha(),'a11b22c33d44'))
['a', 'b', 'c', 'd']
tuple(filter(lambda x: x.isalpha(),'a11b22c33d44'))
('a', 'b', 'c', 'd')
set(filter(lambda x: x.isalpha(),'a11b22c33d44'))
{'a', 'b', 'c', 'd'}
list(filter(lambda x:x>4, [1,2,3,4,5,6,7]))
[5, 6, 7]
set(filter(lambda x:x>4, [1,2,3,4,5,6,7]))
{5, 6, 7}
6 zip()函数
- 参数:元组、列表、字典等迭代器。
- zip(x1)从x1中依次取一个元组,组成一个元组
- zip(x1,x2)分别从x1和x2依次各取出一个元素组成元组,所有元组组合成一个新的迭代器
x1 = [1, 2, 3, 4]
z = zip(x1)
print(type(z))
print(list(z))
<class 'zip'>
[(1,), (2,), (3,), (4,)]
x1 = [1,2,3,4,5]
x2 = [6,7,8,9,10]
z1 = zip(x1,x2)
print(list(z1))
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
Python3函数式编程的更多相关文章
- Python3 函数式编程
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用.而允许使用变量的程序设计语言,由 ...
- Python3 函数式编程自带函数
一 map函数 引子 需求1:num1=[1,2,3,4],我的需求是把num1中的每个元素平方后组成新列表. ret = [] num1 = [1,2,3,4] for i in num1: ret ...
- s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法
python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf ...
- Python3基础(3)集合、文件操作、字符转编码、函数、全局/局部变量、递归、函数式编程、高阶函数
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- [Python3] 035 函数式编程 高阶函数
目录 函数式编程 之 高阶函数 1. 引子 2. 系统提供的高阶函数 3. functools 包提供的 reduce 4. 排序 函数式编程 之 高阶函数 把函数作为参数使用的函数,叫高阶函数 1. ...
- Python3学习之路~3.2 递归、函数式编程、高阶函数、匿名函数、嵌套函数
1 递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. def calc(n): print(n) if int(n / 2) == 0: return n r ...
- [Python3] 038 函数式编程 偏函数
目录 函数式编程 之 偏函数 1. 关于强制类型转换 int 的补充 2. 利用 int 新建函数 3. functools.partial 函数式编程 之 偏函数 1. 关于强制类型转换 int 的 ...
- [Python3] 037 函数式编程 装饰器
目录 函数式编程 之 装饰器 Decrator 1. 引子 2. 简介 3. 使用 函数式编程 之 装饰器 Decrator 1. 引子 >>> def func(): ... pr ...
- [Python3] 036 函数式编程 返回函数
目录 函数式编程 之 返回函数 1. 引子 2. 闭包 closure 函数式编程 之 返回函数 函数可以返回具体的值 也可以返回一个函数作为结果 1. 引子 1.1 定义一个普通函数 >> ...
随机推荐
- 网络抓包 Fiddler
1. Fiddler 抓包简介 Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据.当然Fiddler很屌,在打开它的那一瞬间,它就已经设置好了浏览器的代理了.当你关闭的时候 ...
- Win10 + Visual Studio 2017 下 OpenCV无法显示图像的问题
测试代码如下: #include "stdafx.h" #include<opencv2\opencv.hpp> #include<opencv2\highgui ...
- [USACO12DEC]逃跑的BarnRunning Away From…
题意 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个 题解 似乎有好多种做法啊……然而蒟蒻只会打打主席树的板子…… 调了一个上午一直WA……狠下心来重打一遍居然直接一遍过 ...
- openwrt 添加 802.1x客户端njit
1.修改feed的配置文件 feeds.conf.default 添加下面两句: src-svn njit https://github.com/liuqun/openwrt-clients/trun ...
- JSON和JSONP详解
什么是JSON JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点. JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascrip ...
- Nodejs实现WebSocket通信demo
一.创建websocket.js文件 步骤: 1.创建websocket.js文件,复制如下代码: 2.安装nodejs-websocket依赖: 3.该文件夹下命令行执行 node websocke ...
- java开发之——[接口回调]
一.回调的含义和用途 1. 什么是回调? 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类:同步调用.异步调用和回调.同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的 ...
- 【转载】linux下升级npm以及node
原文:http://blog.csdn.net/qq_16339527/article/details/73008708 npm升级 废话不多说,直接讲步骤.先从容易的开始,升级npm. npm这款包 ...
- ExtJs常用布局--layout详解(含实例)
序言: 笔者用的ExtJs版本:ext-3.2.0 ExtJs常见的布局方式有:border.form.absolute.column.accordion.table.fit.card.anchor ...
- TensorFlow 框架
TensorFlow TensorFlow核心程序由2个独立部分组成: a:Building the computational graph构建计算图 b:Running the comput ...