文档章节

Python的函数式编程及基本函数

A
 Adlib_ii
发布于 2016/05/07 23:23
字数 664
阅读 29
收藏 3

函数式编程

    函数式编程并不是在使用Python时需要考虑的首要问题,它的主要作用在于写出更为精确和高效的代码。

    用函数式的风格写代码时,函数应该设计成没有其它副作用,也就是所谓的纯函数:函数接收参数并生成输出而不保留任何状态或修改任何不反映在返回值中的内容。

# 非函数式
a = 0
def increment1():
    global a
    a += 1
    
# 函数式
def increment2(a):
    return a + 1


lambda

    匿名函数,一般用来给map、filter等服务,即用即扔,或者作为回调函数,传递给某些应用。

    lambda args: expression

    冒‍号左边是参数,右边是表达式,并将结果作为返回‍值。


map

    map接受一个方法和一个集合作为参数,以集合中的每一个元素作为参数传入方法,然后把返回值插入到新创建的集合中,最后返回那个新集合。

>>> map(lambda s: s * 2, [1,2,3,4,5])[2, 4, 6, 8, 10]

    map也可以接收多个集合作为参数,这个时候,会从多个集合中依次取出对应元素组成元组传递给方法,再将执行结果插入到新的集合中并返回该集合。如果多个集合长度不一致,会以None补上。当然,集合的个数需要与方法参数的个数一致。

>>> plus = lambda x,y : (x or 0) + (y or 0) # x or 0 为防止None和0相加出现异常
>>> map(plus, [1,2,3], [4,5,6])
[5, 7, 9]
>>> map(plus, [1,2,3,4], [4,5,6])
[5, 7, 9, 4]
>>> map(plus, [1,2,3], [4,5,6,7])
[5, 7, 9, 7]

    有种情况是传递给map的func方法为None,则从集合中取值的过程依然不变,但是会将取值后的结果直接返回。

>> map(None, [1,2,3,4])
[1, 2, 3, 4]
>>> map(None, [1,2,3,4], [5,6,7,8])
[(1, 5), (2, 6), (3, 7), (4, 8)]
>>> map(None, [1,2,3,4], [5,6,7])
[(1, 5), (2, 6), (3, 7), (4, None)]
>>> map(None, [1,2,3,4], [6,7,8,9], [11,12])
[(1, 6, 11), (2, 7, 12), (3, 8, None), (4, 9, None)]


reduce

    reduce接收的参数形式如下:

 reduce(func, iterable[, initializer])

    reduce对iterable可迭代对象中的元素从左到右累计运算,initializer为初始值,若未指定初始值,则将第一个元素作为初始值,从第二个开始迭代。

>>> plus = lambda x, y : x + y
>>> reduce(plus, [1,2,3,4,5])
15
>>> reduce(plus, [1,2,3,4,5], 10)
25


filter

   filter同样接收一个方法和可迭代的集合对象作为参数,行为和map类似,但是filter会从方法执行结果中过滤出值为True的结果集并返回。

>>> filter(lambda x: x % 2, [1,2,3,4,5,6,7,8,9,10])
[1, 3, 5, 7, 9]














© 著作权归作者所有

共有 人打赏支持
A
粉丝 0
博文 3
码字总数 2917
作品 0
南通
Python函数式编程:从入门到走火入魔

函数式编程源自于数学理论,它似乎也更适用于数学计算相关的场景,因此本文以一个简单的数据处理问题为例,逐步介绍 Python 函数式编程从入门到走火入魔的过程。 很多人都在谈论函数式编程(...

好铁
2017/10/21
0
0
《Python从小白到大牛》简介

本书是一部系统论述Python编程语言、OOP编程思想以及函数式编程思想的立体化教程(含纸质图书、电子书、教学课件、源代码与视频教程)。为便于读者高效学习,快速掌握Python编程方法。本书作...

tony关东升
06/26
0
0
解释一下,函数式方程,要不你进来看下?

函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序...

胶水语言
05/10
0
0
Python 学习总结(二):理解函数式编程,丰富开发

回顾上一节,我们已经将python的基础知识了解掌握,现在可以开始进一步的学习了。函数,无论在Java、C还是其他语言,都不可避免,这也从侧面反映了函数的重要性。所以,也就产生了函数式编程...

海岸线的曙光
01/22
0
0
python函数式编程学习笔记

函数的不定长参数 当函数的参数不确定时,可以使用 和 。 是可变的positional arguments列表(表示任何多个无名参数,它是一个tuple),是可变的keyword arguments列表(表示关键字参数,它是一...

xinet
2017/08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(一)软件测试专题——之Linux常用命令篇01

本文永久更新地址:https://my.oschina.net/bysu/blog/1931063 【若要到岸,请摇船:开源中国 不最醉不龟归】 Linux的历史之类的很多书籍都习惯把它的今生来世,祖宗十八代都扒出来,美其名曰...

不最醉不龟归
22分钟前
6
0
蚂蚁金服Java开发三面

8月20号晚上8点进行了蚂蚁金服Java开发岗的第三面,下面开始: 自我介绍(要求从实践过程以及技术背景角度着重介绍) 实习经历,说说你在公司实习所做的事情,学到了什么 关于你们的交易平台...

edwardGe
29分钟前
7
0
TypeScript基础入门 - 函数 - this(三)

转载 TypeScript基础入门 - 函数 - this(三) 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.4 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
38分钟前
0
0
Spark core基础

Spark RDD的五大特性 RDD是由一系列的Partition组成的,如果Spark计算的数据是在HDFS上那么partition个数是与block数一致(大多数情况) RDD是有一系列的依赖关系,有利于Spark计算的容错 RDD中每...

张泽立
46分钟前
0
0
如何搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已...

Java大蜗牛
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部