当前位置: 首页 > 编程日记 > 正文

【廖雪峰Python学习笔记】高阶函数

Higher-order function

  • 高阶函数
    • 映射
    • 过滤算法
    • 排序算法

高阶函数

  1. 变量可指向函数
>>> abs			# 函数
<built-in function abs>
>>> abs(-0)		# 函数调用
0
>>> func = abs	# 变量可指向函数
>>> func(-9)	# 调用变量 = 调用函数
9
  1. 函数名 && 变量
>>> abs = 9		# 函数名可以作为变量使用
>>> abs(-9)		# 函数名作为变量时,相当于重新赋值,失去之前的函数功能
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
  1. 高阶函数 —— 一个函数接受另一个函数作为参数
>>> def sum(x,y,f):return f(x) + f(y)

调用高阶函数

>>> sum(3,-9,abs)		# 12

映射

  1. map()
  • 接收参数 :函数、Iterable
  • 计算过程 :将传入函数依次作用于Iterable中的每个元素
  • 返回结果 :Iterator(惰性序列)
>>> def f(x):return x * x
>>> map(f,[0,1,2,3,4,5])	# 相当于[f(0),f(1),f(2),f(3),f(4),f(5)]
  • 其效果为:
map(f,[0,1,2,3,4,5]) = [f(0),f(1),f(2),f(3),f(4),f(5)]

map(f,[0,1,2,3,4,5])函数对应的示意图:

f0 = 0 * 0
f1 = 1 * 1
f2 = 2 * 2
f3 = 3 * 3
f4 = 4 * 4
f4 = 5 * 5
0
1
4
9
16
25
fx = x * x
0
1
2
3
4
5
>>> f = [0,2,4,6]
>>> f.map(w => w + 1)
[1,3,5,7]
  1. reduce()
  • 接收参数 :函数、Iterable
  • 计算过程 :函数作用在序列上,将结果与序列的下一个元素进行累计计算
  • 返回结果 :累积计算结果
>>> def f(x,y):return x * 10 + y
>>> reduce(f,[0,1,2,3,4,5])	# 相当于f(f(f(f(f(0,1),2),3),4),5)
  • 其效果为:
reduce(f,[0,1,2,3,4,5]) = f(f(f(f(f(0,1),2),3),4),5)

reduce(f,[0,1,2,3,4,5])函数对应的示意图:

fx,y = x * 10 + y
0
1
2
3
4
5
1
12
123
1234
12345

累加:

>>> f = [1,2,3,4,5,6,7,8,9]
>>> f.reduce(x, y => x + y)
45
  1. map() && reduce()
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from functools import reducedef fn(x, y):return x * 10 + ydef char2num(s):DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}return DIGITS[s]print(reduce(fn, map(char2num, '13579')))	#13579

过滤算法

filter()

  • 接收参数 :函数、序列
  • 计算过程 :将传入函数依次作用于序列中的每个元素
  • 返回结果 :Iterator,仅返回序列中符合条件的元素

利用filter求素数

#!/usr/bin/env python3
# -*- coding: utf-8 -*-def main():for n in primes():if n < 1000:print(n)else:break# 构造从3开始的奇数序列[生成器,无限序列]
def _odd_iter():	n = 1while True:n = n + 2yield n# 定义筛选函数
def _not_divisible(n):	return lambda x: x % n > 0# 定义生成器,不断返回下一个素数
def primes():yield 2it = _odd_iter()while True:n = next(it)yield nit = filter(_not_divisible(n), it)if __name__ == '__main__':main()

排序算法

sorted()

  • 可对list进行排序
  • 数字排序 :默认从小到大
  • 字符串排序 :默认按照ASCII大小比较,‘Z’<‘a’。先大写后小写
>>> sorted([20,14,-22,4,9])			# 默认从小到大
[-22, 4, 9, 14, 20]
>>> sorted([20,14,-22,4,9],key=abs)	# key处理后再排序
[4, 9, 14, 20, -22]>>> sorted(['Bob','Jimmy','grace','amey','Zoo'])	# 默认ASCII码从小到大排序
['Bob', 'Jimmy', 'Zoo', 'amey', 'grace']
>>> sorted(['Bob','Jimmy','grace','amey','Zoo'],key=str.lower)	# 忽略大小写排序
['amey', 'Bob', 'grace', 'Jimmy', 'Zoo']
>>> sorted(['Bob','Jimmy','grace','amey','Zoo'],key=str.lower,reverse=True)	# 反向排序
['Zoo', 'Jimmy', 'grace', 'Bob', 'amey']

相关文章:

丁贵才130702010042第二次作业

第二次作业 2.9 设有如下语句&#xff0c;请用相应的谓词公式分别把它们表示出来&#xff1a; &#xff08;1&#xff09;有的人喜欢梅花&#xff0c;有的人喜欢菊花&#xff0c;有的人既喜欢梅花有喜欢梅花。 解&#xff1a;定义谓词 P&#xff08;x&#xff09;&#xff1a;x…

SpringMVC @RequestBody接收Json对象字符串

以前&#xff0c;一直以为在SpringMVC环境中&#xff0c;RequestBody接收的是一个Json对象&#xff0c;一直在调试代码都没有成功&#xff0c;后来发现&#xff0c;其实 RequestBody接收的是一个Json对象的字符串&#xff0c;而不是一个Json对象。然而在ajax请求往往传的都是Js…

【iOS】自定义日期选择器

自定义了一个日期选择器&#xff0c;与大家分享一下&#xff0c;期待宝贵建议。 github下载地址&#xff1a;https://github.com/huahua0809/XHDatePicker 下面只是说明一下怎么用&#xff0c;具体实现请下载代码看看&#xff1b; 如果大家觉得这个分享有所帮助的话&#xff0c…

【廖雪峰Python学习笔记】函数式编程

Functional Programming高阶函数返回函数匿名函数装饰器偏函数高阶函数 面向过程的程序设计&#xff1a; 把大段代码拆成函数&#xff0c;通过一层层函数调用&#xff0c;可将复杂任务分解成若干简单的任务函数是面向过程的程序设计的基本单位计算机Computer && 计算c…

asp 随机读取ID之Access

我在用ASP连接access 这个桌面数据库的时候&#xff0c;有时候要随机读取ID&#xff0c;传统的办法是&#xff1a; select top 3 * from tablename order by Rnd(ID) 但这样不行&#xff0c;默认还是按ID排序。 解决办法加上timer() 这个函数 select top 3 * from tablenam…

iOS Plist 文件的 增 删 改

一&#xff1a;Plist 文件的创建 Plist 文件作为我们IOS开发的一种数据存储文件&#xff0c;还是经常会用到的。在看《X-code江湖录》的时候&#xff0c;看到了这一点。自己就写了一下&#xff0c;把写的东西分享出来&#xff01;先看看它的创建&#xff0c;它的创建和我们其他…

Shine Button动画效果 类似Tinder APP的卡片界面

Shine Button动画效果--WCLShineButton 类似太阳动画的button FSPagerView 主要使用UICollectionView实现的优雅的屏幕幻灯片效果&#xff0c;主要用于Banner、产品展示、欢迎引导等。有Swift和OC两个版本。 folding-cell 一个可扩展的具有折叠效果的内容单元格 Cell折叠动效…

【廖雪峰Python学习笔记】面向对象编程OOP

面向对象编程 OOP&#xff1a;Object Oriented Programming程序的基本单元&#xff1a;对象 [ 数据 操作数据的函数] [属性 方法]三大特点&#xff1a;数据封装、继承和多态OPP中的计算机程序&#xff1a; 一系列命令的集合 —— 一组函数顺序执行。函数化大为小&#xff0…

基于 CoreText 实现的高性能 UITableView

来源&#xff1a;伯乐在线 - Hawk0620 如有好文章投稿&#xff0c;请点击 → 这里了解详情 如需转载&#xff0c;发送「转载」二字查看说明 引起UITableView卡顿比较常见的原因有cell的层级过多、cell中有触发离屏渲染的代码&#xff08;譬如&#xff1a;cornerRadius、maskTo…

.net程序员面试题

1&#xff0e; 在web页面中不论显示器的分辨率的大小是800600&#xff0c;还是1024768使得页面都显示在屏幕中间。 答&#xff1a;Margin:auto; 2&#xff0e; 请利用正则表达式验证一个字符串是否为数字串 &#xff08;请用csharp&#xff09;。 1 public static b…

Android深度探索与驱动开发(一)

Android移植可分为两个部分&#xff1a;应用移植和系统移植。应用移植是指将应用程序移植到某一特定硬件平台上。由于不同硬件平台之间的差异&#xff0c;Android SDK API也有可能存在差异&#xff0c;或者将应用程序从低版本Android移植到高版本的Android上。为了保证应用程序…

【廖雪峰Python学习笔记】面向对象高级编程

文章目录为实例和类绑定属性和方法\_\_slots__限制当前class实例&#xff0c;对子类不管用property装饰器&#xff0c;将getter方法变成属性多重继承 —— 一个子类可同时获得多个父类的所有功能[Mixin]定制类枚举类元类为实例和类绑定属性和方法 创建类 class Animal(object…

5分钟 搭建免费个人博客

五分钟倒数已经可以计时了。 三步完成免费个人博客搭建&#xff0c; 这是一篇小白也能看懂的文章&#xff0c;本文主要针对mac OS &#xff0c;Windows 除了软件安装方式和命令有些区别&#xff08;装了git bash也一样&#xff09;&#xff0c;其他基本一样。 你可能会经常看到…

基数排序之算法

一、定义基数排序是一种非比较型整数排序算法&#xff0c;其原理是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。由于整数也可以表达字符串&#xff08;比如名字或日期&#xff09;和特定格式的浮点数&#xff0c;所以基数排序也不是只能使用于整数。二、…

MyBaties学习记录

typeAliases详解&#xff1a; 类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关&#xff0c;存在的意义仅在于用来减少类完全限定名的冗余&#xff1b;&#xff08;也就是为类型设置简称&#xff09; 实例: 通过包名称加上简称调用代替&#xff1b; 注解表示: // …

【廖雪峰Python学习笔记】错误、调试、测试

文章目录错误处理调试单元测试unitcase文档测试错误类型程序编写问题bug – 字符类型错误等用户输入错误 – 输入不符合规定的字符串异常&#xff0c;程序运行时无法预测 – 磁盘满了&#xff0c;无法写 错误处理 错误处理机制&#xff1a;try…except…finally… try运行可…

iOS开发——手势识别器(用手势实现图片旋转和缩小放大)

iOS开发中&#xff0c;除了有关触摸的这组方法来控制用户的手指触控外&#xff0c;还可以用UIGestureRecognize的衍生类来进行判断&#xff0c;方便了开发。 UIGestureRecognize的子类类别有以下几种&#xff1a; UITapGestureRecognizer //轻拍识别器UIPinchGestureRecognize…

直播APP常用动画效果

作者: 落影loyinglin 地址: http://www.jianshu.com/p/a9a201ed3aa8 介绍 记录、总结开发遇到一些问题&#xff0c;大家一起交流学习。 这次带来&#xff0c;对直播APP的常用动画总结。 效果展示 下面是一个很多平台都有的入门豪华礼物动画——烟花。 一个复杂的礼物动画&…

windows8下安装Visual Studio2008

windows8下安装Visual Studio2008是一个比较麻烦的事情&#xff0c;不过经过我3个小时的奋斗终于安装成功了。这是我安装Visual Studio 2008过程中遇到的最复杂的一次。 下面我用图解的方式&#xff0c;一步一步的说明安装Visual Studio2008的过程。 第一步&#xff1a;因为win…

[SDK文档]SDK简介

文档链接&#xff1a;https://docs.growingio.com/docs/sdk-integration SDK工作方式 主要内容&#xff1a;GIO采集内容&#xff0c;数据安全措施&#xff0c;针对数据采集的控制项 JS SDK 添加GIO跟踪代码于<head>...</head> 之间异步加载&#xff0c;不影响网…

mysql主从库配置ps:mysql5.6

1 Mysql cluster版本主从服务器搭建实践 主从的作用&#xff1a;MySQL的主从服务器可以满足同步数据库&#xff0c;同步表&#xff0c;同步表内容&#xff0c;也可以指定仅同步某个数据库或某个表&#xff0c;还可以排除不同步某个数据库某个表。 同步原理&#xff1a;主从数据…

XCODE 4.5 IOS多语言设置

转&#xff1a;http://blog.csdn.net/samuelltk/article/details/8480403 前些天升级到Xcode4.5&#xff0c;现在正在用Xcode4.5IOS6开发项目&#xff0c;当使用国际化时&#xff0c;遇到了一点问题&#xff0c;之前版本Xcode上新建Localizable.strings后&#xff0c;添加语言的…

socket第三方库 AsyncSocket(源码注释解读.转)

作者 OneTea 关注 2016.09.19 11:33* 字数 0 阅读 83评论 0喜欢 1#import <Foundation/Foundation.h> class AsyncSocket;//async异步的 synchro同步 class AsyncReadPacket; class AsyncWritePacket; //extern来说可以理解为扩展吧是这样的是从一个类扩展到另一个类中的…

【每日一学】复杂度分析

文章目录目标什么是数据结构复杂度分析目标 建立时间复杂度、空间复杂度意识&#xff0c;写出高质量的代码能够设计基础架构提高编程技能训练逻辑思维 什么是数据结构 广义&#xff1a;一组数据的存储结构 | 操作数据的一种方法 解决问题&#xff1a;如何更快更省的处理数据…

noip2010提高组3题题解 by rLq

本题地址http://www.luogu.org/problem/show?pid1525 关押罪犯 题目描述 S 城现有两座监狱&#xff0c;一共关押着N 名罪犯&#xff0c;编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久&#xff0c;如果客观条件具备则随时可能爆发冲突。我们用“怨气…

hdu 1306(字符串匹配)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1306 思路&#xff1a;一开始还以为是求最长公共序列呢。。。仔细一看&#xff0c;orz.....就是求两个串匹配时公共部分字符最多相同的个数。。。 View Code 1 #define _CRT_SECURE_NO_WARNINGS2 #include<…

iOS之使用CoreImage进行人脸识别

更新 &#xff1a;应各位朋友的需求&#xff0c;补上了OC版本的demo&#xff0c; OC版下载地址 另外附上 : swift版下载地址 CoreImage是Cocoa Touch中一个强大的API&#xff0c;也是iOS SDK中的关键部分&#xff0c;不过它经常被忽视。在本篇教程中&#xff0c;我会带大家一起…

[HTTP协议]入门篇

文章目录http的前世今生1. 史前时期2. 创世纪3. 从产生到发展HTTP是什么与HTTP相关的各种概念与HTTP相关的技术TCP/IP协议栈http的前世今生 1. 史前时期 20世纪60年代&#xff0c;美国国防部高等研究计划署ARPA建立ARPA网&#xff0c;四个分布在各地的节点20世纪70年代&#…

CSS中实现DIV容器垂直居中

1.vertical-align&#xff1a;middle 垂直对齐 如表格元素中的<td>、<th>、<caption>等&#xff0c;而像<DIV>、<span>这样的元素是没有valign特性的&#xff0c;因此使用vertical-align对它们不起作用。 2.text-align:center 文本水平居中 一、…

如何制作自己的CocoaPod库

作者 OneTea 关注 2016.12.29 18:02* 字数 848 阅读 102评论 0喜欢 6制作流程图&#xff1a; 流程图1.将代码托管在github上 1.1本地代码 如图&#xff1a; Snip20161228_7.png在github上创建 并上传 Snip20161228_3.png切换到本地项目cd xxx路径后 用git命令行 &#xff08;…