一 函数式编程理解

1.函数式编程的含义:

函数式编程是一种编程的基本风格,就是构建程序的结构和元素的方式。函数式编程将计算过程看做是数学函数,也就是可以使用表达式编程。在函数的代码中,函数的返回值只以来传入函数的参数,因此使用相同的参数调用2次就会得到相同的结果。

如果说这段话很难理解,我觉得可以这么想,函数式编程就是一种函数,或者是一种结构,在该结构中,将函数和函数的参数都作为参数。

2.函数式编程具有的优点:
a.便于进行单元测试
b.便于调试
c.适合并行执行

二 常用的函数式编程

1.Lambda表达式
Lambda表达式是一种匿名函数,它的结构如下

lambda 参数列表:函数返回值或表达式语句

Lambda表达式可以做如下功能:
a.定义函数
例如如下代码:

getsum = lambda x,y : x+y

该结构和如下代码是一样的:

def getsum(x,y):return x+y

使用lambda表达式定义完成函数后,可以直接引用该函数,如下代码:

getsum = lambda x,y : x+y
print(getsum(1,2))

结果会显示结果为:3

b.构建lambda表达式数组
定义Lambda表达式数组的结构为:

数组名=[(lambda 参数:函数返回值表达式1),((lambda 参数:函数返回值表达式2)···]

调用Lamda表达式数组的方式是:

数组名[索引](参数列表)

举例如下

myarr =[(lambda x,y: x+y),(lambda x,y:x*2+y*2),(lambda x,y:x*3+y*3)]
print(myarr[0](1,1),myarr[1](2,3),myarr[2](1,4))

在上述代码中定义了一个lambda表达式数组,然后给每一个表达式赋值,得出的结果分别为:2 10 15
lambda表达式也可以直接作为函数的返回值,可写成 return lambda表达式 即可

2. map函数
map函数将指定序列中的元素作为参数依次被制定函数调用,并输出一个新的序列作为返回值,map函数的语法结构为:

结果序列 = map(函数名,[参数1的序列],[参数2的序列]···)

具体例子可看如下代码

#定义函数getsum()
def getsum(x,y):return x+y
# 使用map函数将getsum作为参数,并将两个序列的内的元素分别作为x和y的参数传递值
arrr = map(getsum,[1,2,3],[2,5,6])
for i in arrr:print(i)

经过计算,输出的结果分别是

3
7
9

可以将map函数与lambda表达式一起使用,代码如下:

arr2 = map(lambda x: x ** 2, [2,4,6,8])
for i in arr2:print(i)

输出结果为:

4
16
36
64

3.filter函数
filter函数可以对指定的序列进行过滤,该函数的语法结构如下:

filter(函数,序列)

在该语法结构中,filter内的函数返回值是布尔值False或者是True,序列值可以是列表、元组或者是字符串,返回的结果为函数判断为True对应的序列元素,具体看如下代码:

#定义一个求偶数的函数is_even
def is_even(x):return x%2==0
#使用filter函数调用is_even函数
arr3 = filter(is_even,[1,2,3,4,5,6,7,8])
for i in arr3:print(i)

返回值为:

2
4
6
8

4.reduce函数
这个函数非常有意思,有点递归的感觉,引用的函数必须有两个参数,在引用序列的时候,序列中第一个和第二个元素作为参数输出结果作为新的第一个参数,第三个元素变成第二参数,以此结合。该函数从python3.0开始就不能直接在python内置函数内了,需要调用functools模块才可以。
函数的具体语法结构如下:

计算结果 = reduce(函数,序列)

具体示例代码如下:

#引入functools模块
import functools
#定义一个简单的数相乘的函数求积
def com(x,y):return  x*y
result = functools.reduce(com,[1,2,3,4,5,6,7])
print(result)

输出结果为:5040
该函数的运行过程就是123*···*7=5040
可以理解为com(com(com(com(com(com(1,2),3),4),5),6),7)的结果
和如下的代码有类似:

def cum(x):if x==1:return 1else:return cum(x-1)*x
print(cum(7))

该代码的输出结果也是:5040
5.zip函数
zip函数就像它的名字一样是个压缩的用途,一般是将多个元组打包成一个列表进行运算,所以zip函数的参数都是元组。
压缩的示例代码如下:

a = [1,2,3]
b = [3,4,5]
c = [7,6,0]
zippped = zip(a,b,c)
for i in zippped:print(i)

输出结果为:

(1, 3, 7)
(2, 4, 6)
(3, 5, 0)

zip函数也可以把压缩的列表进行解压,在打包结果前加上*即可,示例代码如下:

a = [1,2,3]
b = [3,4,5]
c = [7,6,0]
#将数据压缩,结果为zipped
zippped = zip(a,b,c)
#将zipped解压为uzipped
uzipped = zip(*zippped)
for j in uzipped:print(j)

输出结果为:

(1, 2, 3)
(3, 4, 5)
(7, 6, 0)

函数式编程中常用的函数(总结)相关推荐

  1. 如何在函数式编程中存在时间函数?

    本文翻译自:How can a time function exist in functional programming? I've to admit that I don't know much ...

  2. 中常用的函数_ST语言编程中常用的函数/功能块

    大部分PLC都会内置很多基本的函数和功能块供编程人员调用,而且很多具有通用性,也就是在不同品牌的PLC中,这些函数和功能块的名称.用法和功能相同,记住这些函数和功能块的名称和使用方法,能让我们编程时更 ...

  3. Python函数式编程中map()、reduce()和filter()函数的用法

    Python中map().reduce()和filter()三个函数均是应用于序列的内置函数,分别对序列进行遍历.递归计算以及过滤操作.这三个内置函数在实际使用过程中常常和"行内函数&quo ...

  4. 2. Python函数式编程中的字符串,元组,函数的分类,高阶函数,一篇文章都介绍一遍

    函数式编程中的字符串 在函数式编程中,经常用到 Python 字符串,因其是不可变数据结构. 字符串本身是一个对象,具备很多对象方法,与常识中函数的使用不太相同,例如下述代码 my_str = &qu ...

  5. C#函数式编程之标准高阶函数

    何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函 ...

  6. 函数式编程中的重要概念

    函数式编程中的重要概念 函数式编程范式的意义 函数类型与高阶函数 部分函数 柯里化 闭包 递归 记忆化 原文地址 函数式编程范式的意义 在众多的编程范式中,大多数开发人员比较熟悉的是面向对象编程范式. ...

  7. 函数式编程中的组合子

    函数式编程是一个比较大的话题,里面的知识体系非常的丰富,在这里我并不想讲的特别的详细.为了应对实际中的应用,我们讲一下函数式编程中最为实用的应用方式--组合子.组合子本身是一种高阶函数,他的特点就是将 ...

  8. 用函数式编程思维解析anagrams函数

    //函数式编程思维分析 这个排列函数 const anagrams = str => {if (str.length <= 2) return str.length === 2 ? [st ...

  9. python编程中常用的12种基础知识总结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

最新文章

  1. 部署war包到阿里云liunx的tomcat时报错:zip END header not found
  2. matlab 二值化_MATLAB实验,图像二值化处理
  3. 【博客美化】评论带头像,且支持旋转
  4. 基础篇:如何做一名专业的软件测试工程师
  5. decode bytes in position 2-3: truncated \UXXXXXXXX escape
  6. 信联获批个人征信牌照,对普通人有什么重大影响?
  7. 1.5 编程基础之循环控制 05 最高的分数
  8. asp之ajax技术:responstext中文乱码
  9. 2017.3.17 激光炸弹 思考记录
  10. 8种排序算法 java_必须知道的八大种排序算法【java实现】
  11. 中南大学 科学计算与MATLAB语言 矩阵的特征值与特征向量
  12. linux远程链接Windows桌面,linux远程桌面链接windows
  13. [Unity] UniWebView的使用
  14. 数字电视输出标准规范和BT601/BT709/BT2020色域转换方法资料整理
  15. matlab中二阶偏导数,MATLAB中带有两个变量的函数的一阶和二阶偏导数
  16. 红帽RHCE之查看进程
  17. 论文翻译 —— Model Free Episodic Control
  18. win10安装jdk及环境配置
  19. 增加网狐旗舰游客登陆功能
  20. 【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组 | 精品题解

热门文章

  1. PHPStorm常用快捷键
  2. [BZOJ3236][Ahoi2013]作业(莫队+树状数组)
  3. 网易微博用户数5677万 与邮箱打通实现整合
  4. 量化交易学习:交易数据自动抓取
  5. Java线程实现生产者—消费者模式
  6. 【C++ Primer Plus】第5章 循环和关系表达式
  7. 感觉大腿内肌肉出血,该怎么办?
  8. android,获取北京时区时间
  9. Python编程(廖雪峰)笔记
  10. 怎么用python画sin函数图像_用python绘制函数图像