文档章节

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

胶水语言
05/10
0
0
《Python从小白到大牛》简介

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

tony关东升
06/26
0
0
Python 学习总结(二):理解函数式编程,丰富开发

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

海岸线的曙光
01/22
0
0
如何用十分钟学会函数式 Python?

函数式编程到底是什么?本文将详解其概念,同时分享怎样在 Python 中使用函数式编程。主要内容包括列表解析式和其他形式的解析式。 函数式模型 在命令式模型中,执行程序的方式是给计算机一系...

CSDN资讯
09/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
14
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部