Python函数-函数式编程
文章目录
- 1 函数式编程
- 2 Python函数式编程
- 2.1 map()
- 2.2 filter()
- 2.3 filter()
1 函数式编程
所谓函数式编程,是指代码中每一块都是不可变的(immutable),都由纯函数(pure function)的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出,没有任何副作用。
def multiply_2(l):for index in range(0, len(l)):l[index] *= 2return l
这段代码就不是一个纯函数的形式,因为列表中元素的值被改变了,如果多次调用 multiply_2() 这个函数,那么每次得到的结果都不一样。
要想让它成为一个纯函数的形式,就得写成下面这种形式,重新创建一个新的列表并返回。
函数式编程的优点,主要在于其纯函数和不可变的特性使程序更加健壮,易于调试(debug)和测试;缺点主要在于限制多,难写。
def multiply_2_pure(l):new_list = []for item in l:new_list.append(item * 2)return new_list
2 Python函数式编程
Python 主要提供了这么几个函数:map()、filter() 和 reduce(),通常结合匿名函数 lambda 一起使用。
2.1 map()
函数 map(function, iterable) 的第一个参数是函数对象,第二个参数是一个可以遍历的集合,它表示对 iterable 的每一个元素,都运用 function 这个函数。
l = [1, 2, 3, 4, 5]
new_list = map(lambda x: x * 2, l) # [2, 4, 6, 8, 10]
print(type(new_list))
print(list(new_list))# 输出
<class 'map'>
[2, 4, 6, 8, 10]
map() 函数直接由 C 语言写的,运行时不需要通过 Python 解释器间接调用,并且内部做了诸多优化,运行速度快
2.2 filter()
filter(function, iterable) 函数,它和 map 函数类似,function 同样表示一个函数对象。filter() 函数表示对 iterable 中的每个元素,都使用 function 判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合。
l = [1, 2, 3, 4, 5]
new_list = filter(lambda x: x % 2 == 0, l) # [2, 4]
print(type(new_list))
print(list(new_list))
2.3 filter()
reduce(function, iterable) 函数,它通常用来对一个集合做一些累积操作。
function 同样是一个函数对象,规定它有两个参数,表示对 iterable 中的每个元素以及上一次调用后的结果,运用 function 进行计算,所以最后返回的是一个单独的数值。
from functools import reduce
l = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, l) # 1*2*3*4*5 = 120
print(type(product))
print(product)
在数据量非常多的情况下,比如机器学习的应用,那我们一般更倾向于函数式编程的表示,因为效率更高;
在数据量不多的情况下,并且你想要程序更加 Pythonic 的话,那么 list comprehension 也不失为一个好选择。
Python函数-函数式编程相关推荐
- python采用函数式编程模式吗_Python函数与函数式编程
1 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创 ...
- 用python处理excel数据做函数_如何使用python通过函数式编程完成excel中的数据处理及分析工作...
Excel是数据分析中最常用的工具,本篇文章通过python与excel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作.在Python中pandas库用于数据处理 ...
- python学习——函数式编程——高阶函数
python学习--函数式编程--高阶函数 函数式编程(高阶函数):1:map && reduce; 2 : filter; 3: sorted; ------------------ ...
- 白话 Python 的函数式编程
今天和大家聊聊 Python 的函数式编程特性.所谓函数式编程,就是指代码中每一块都是不可变的(immutable),都是由 pure function 的形式组成.这里的 pure function ...
- Python的函数式编程--从入门到⎡放弃⎦
很早以前就听说过了函数式编程,印象中是一种很晦涩难懂的编程模式,但却一直没有去进行了解. 恰好这周组内的周会轮到我主持,一时也没想到要分享什么.灵光一闪,就选定函数式编程这个主题吧,反正组里的同事都没 ...
- 【Python】函数式编程
前言 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本 ...
- 函数式编程|python的函数式编程
面向过程,面向对象 面向过程: 分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 面向对象: 把问题中的事务分解成各个对象,建立对象的目的不是为了完成一 ...
- 05 python 要点 (函数式编程)
复习时先看看这个:https://blog.csdn.net/weixin_39880623/article/details/110153616? 第一章 函数式编程 一.生成器 (generato ...
- python的函数式编程玩法+年末小感
从小老师教编程语言就告诉分两种:面向过程和面向对象,正如同小学电脑课面对的是win95,仿佛世界上windows就是操作系统的别名,如今还是这样,高校的计算机中心都是windows,所以linux是要 ...
最新文章
- 记录 grafana登录 从 go 迁移到 php
- 计算机领域认知个人陈述,计算机专业个人陈述十九
- java resume过时方法_面试官没想到,一个 Java 线程生命周期,我可以扯半小时
- Effective Dart 文档注释在Flutter项目中的实践
- 《Nature-Inspired Metaheuristic Algorithms》——蝙蝠算法 Bat Algorithm
- Drools教程 —— 简介
- 数据分析思维(极客时间)
- pb9连接mysql
- springcloud之gateway的使用
- 【好工具】强烈安利的文献管理软件 Mendeley
- Arduino ESP8266利用SPIFFS上传文件和查看文件
- 文人教你说祝福——古语祝福
- php一句话上传webshell,一句话shell,哪些是恶意的php一句话webshell
- 为什么机器学习之路没有捷径可走
- [渗透测试][Kali]对DC-2靶机进行渗透测试
- 海到无边天作岸,身登绝顶我为峰
- 从“盗墓者”变成“守墓人”,鼻祖级黑客Charlie Miller眼中的自动驾驶安全
- Python 计算 瑞幸和星巴克 谁的门店最多
- 【记录爬虫实战过程】入门学习·详细过程·爬取天气信息并通过pyecharts进行可视化展示1
- Eplan p8 v2.7 卡顿问题
热门文章
- scrapy模拟浏览器翻页爬取智联
- 了解常用 Markdown 扩展语法
- android file函数,Android Makefile中wildcard、notdir、patsubst函数的用法
- 【JavaSe】网络编程篇(一) 网络编程入门
- 图片预览工具不存在_如何维护所有工具,使它们永远(几乎)永远存在
- python 文件创建与写入
- Python中的网络通信
- 对着手机咳嗽一声,就能检测新冠了?还是剑桥大学出品
- 计算机化自适应测验 英语,情绪调节的计算机化自适应测验开发:CAT-ER
- tplink迷你路由器中继模式_TP-Link TL-WR700N V1-V2迷你型路由器无线中继设置