python3笔记十六:python匿名函数和高阶函数
一:学习内容
- lambda函数
- map函数与reduce函数
- filter函数
- sorted函数
二:匿名函数-lambda
1.概念:不使用def这样的语句去定义函数,使用lambda来创建匿名函数
2.特点:
- lambda只是一个表达式,函数体比def简单
- 实现的逻辑比较简单,主体是一个表达式,而不是代码块,lambda表达式中封装简单的逻辑
- lambda函数有自己的命名空间,且不能访问自由参数列表之外的或者全局命名空间的参数
3.格式:
lambda 参数1,参数2,......,参数n:expression
4.lambda函数练习一
a=lambda x:x+1
a(1)
a(2)
lambda作为一个表达式,定义了一个匿名函数,上面的代码x为入口参数,x+1为函数体,用函数来表示为:
def g(x):
return x+1
5.lambda函数练习二
a=lambda x,y,z:(x+y)**z
print(a(1,2,3))
6.lambda函数练习三
def make_repeater(n):
return lambda s:s*n
twice=make_repeater(2)
twice('word')
twice(5)
上面的函数可以转换为:
twice=lambda s,n:s*n
twice('word',2)
twice(5,2)
7.lambda函数练习四
lambda表达式会返回一个函数对象,如果没有变量接受这个返回值,它很快就会被丢弃,也正是由于lambda只是一个表达式,所以它可以直接作为list、dict等成员
lists=[lambda s:s**3,lambda a:a**3]
data=lists[0]
data(2)
三:高阶函数-map和reduce
python内置了map()和reduce函数()
1.map()函数
格式:map(fn,lsd)
参数1是一个函数,fn只有一个参数
参数2是一个序列
功能:将传入的函数依次作用在序列中的每一个元素,并把结果作为新的Iterator返回
举例1:
#将单个字符转成对应字面量整数
def chr2int(chr):
return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]
list1 = ["2","1","6","5"]
#惰性列表,需要用list显示转换才会显示
res = map(chr2int,list1)
print(res)
print(list(res))
举例2:
#将整数元素的序列转为字符型的
#[1,2,3,4] ["1","2","3","4"]
a = [1,2,3,4]
print(list(map(str,a)))
2.reduce()函数
格式:reduce(fn,lsd)
参数1为函数,fn有两个参数
参数2位列表
功能:一个函数作用在序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素累计运算
举例1:
from functools import reduce
#求一个序列的和
def mySum(x,y):
return x+y
list2 = [1,2,3,4,5]
r = reduce(mySum,list2)
print(r)
3.map()函数和reduce()函数结合使用
举例1:
#将字符串转成对应字面量数字
def str2int(str):
def fc(x,y):
return x*10 + y
def fs(chr):
return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]
return reduce(fc,map(fs,list(str)))
a = str2int("13579")
print(a)
print(type(a))
四:高阶函数-filter()
1.filter()函数
格式:filter(fn,lsd)
参数1为函数
参数2位序列
功能:用于过滤序列,即把传入的参数依次作用于序列的每个元素,根据返回的是True还是False决定是否保留该元素
举例1:
list1 = [1,2,3,4,5]
#筛选条件,偶数保留
def func(num):
if num % 2 ==0:
return True
return False
#惰性序列,需要显示转换为列表才能展示数据
res = filter(func,list1)
print(list(res))
print(list1)
举例2:
data = [["姓名","年龄","爱好"],["tom",25,"无"],["hdd",26,"游泳"]]
def fun2(v):
v = str(v)
if v == "无":
return False
return True
for line in data:
s = filter(fun2,line)
print(list(s))
四:高阶函数-sorted()
用于排序
1.sorted()函数--普通排序
list1 = [4,7,2,6,3]
list2 = sorted(list1) #默认升序排序
print(list1)
print(list2)
2.sorted()函数--降序排序
list5 = [4,7,2,6,3]
#reverse 按升序排完以后反转
list6 = sorted(list5,reverse=True)
print(list5)
print(list6)
3.sorted()函数--字符串排序按ASCII码值排序
#字符串排序,比较ASCII码值
list7 = ["b","d","a","e"]
list8 = sorted(list7)
print(list7)
print(list8)
4.sorted()函数-自定义排序规则
#按绝对值大小排序
list3 = [4,-7,2,6,-3]
#key接受函数来实现自定义排序规则
list4 = sorted(list3,key=abs)
print(list3)
print(list4)
5.sorted()函数-自定义排序规则2
#按字符串长短排序,函数可以自己写
def myLen(str):
return len(str)
list9 = ["b333","d11111111","a22","e4322"]
list10 = sorted(list9,key=myLen)
print(list9)
print(list10)
python3笔记十六:python匿名函数和高阶函数的更多相关文章
- 十、python沉淀之路--高阶函数初识
一.高阶函数:分两种:一种是返回值中包含函数体:另一种是把一个函数体当作了参数传给了另一个函数 1.返回值中包含函数体 例1. def test(): print('这是一个测试') return t ...
- python开发基础04-函数、递归、匿名函数、高阶函数、装饰器
匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函 ...
- python基础编程: 编码补充、文件操作、集合、函数参数、函数递归、二分查找、匿名函数与高阶函数
目录: 编码的补充 文件操作 集合 函数的参数 函数的递归 匿名函数与高阶函数 二分查找示例 一.编码的补充: 在python程序中,首行一般为:#-*- coding:utf-8 -*-,就是告诉p ...
- Python小世界:匿名函数、高阶函数、推导式
前言 木子本人搞起Python已有多年,一直觉得什么都会,但是有时候实操起来,才觉得很多底层基础的知识都没有彻底的灵活掌握. 另外,网上关于Python基础知识的各种普及已有太多太多. 附上相关大神的 ...
- Python之路-函数基础&局部变量与全局变量&匿名函数&递归函数&高阶函数
一.函数的定义与调用 函数:组织好的.可重复使用的.用户实现单一或者关联功能的代码段.函数能够提高应用的模块性和代码的重复利用率.Python提供了很多内置的函数,比如len等等,另外也可以根据自己的 ...
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
高阶函数Higher-orderfunction 变量可以指向函数 >>> abs #abs(-10)是函数调用,而abs是函数本身 <built-in function ab ...
- Python技法3:匿名函数、回调函数和高阶函数
1.定义匿名或内联函数 如果我们想提供一个短小的回调函数供sort()这样的函数用,但不想用def这样的语句编写一个单行的函数,我们可以借助lambda表达式来编写"内联"式的函数 ...
- 【python】python函数式编程、高阶函数
1.map() : python内置的高阶函数,接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并 返回. def f(x): r ...
- python入门16 递归函数 高阶函数
递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...
- python内置常用高阶函数(列出了5个常用的)
原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://bl ...
随机推荐
- 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右) ...
- 在Mysql中使用索引
MySQL查询的优化是个老生常谈的问题,方法更是多种多样,其中最直接的就是创建索引. 这里通过一个简单的demo来实际用一下索引,看看索引在百万级别查询中速率的提升效果如何 所需数据可以从我前面的一篇 ...
- 解决xshell连接不上阿里云服务器问题
最近购买了阿里云服务器准备玩玩,但是使用xshell连接阿里云服务器时,系统一直提示“Connection established. To escape to local shell, press ' ...
- 在Python中,如何用一行代码去判定整数二进制中的连续 1
利用字节位操作如何判断一个整数的二进制是否含有至少两个连续的1 的方法有多种,大家第一反应应该想到的是以下的第一种方法. 方法一:从头到尾遍历一遍每一位即可找出是否有连续的1存在 这个方法是最普遍的. ...
- mysql高级:触发器、事务、存储过程、调用存储过程
一.触发器 二.pymysql事务测试 三.存储过程 四.pymysql调用存储过程 一.触发器 在某个时间发生了某个事件时 会自动触发一段sql语句 create trigger cmd_ins ...
- Hive权限管理(十)
Hive权限管理 1.hive授权模型介绍 (1)Storage Based Authorization in the Metastore Server 基于存储的授权 - 可以对Metastore中 ...
- PHP-MYSQL中文乱码问题.
从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行. 解决这个问题其实很简单. 1.在建表的时候设置编码类型为gb2312_chinese_ci. 2.在 ...
- Java WEB框架——SSM之Hello world
一.建立项目 先搭建一个webapp项目(要选creat from arctype) 起名 选择maven路径,settings.xml那里要选择override才可以在资源管理器中浏览.接下来直接N ...
- slices = [dicom.read_file(path + '/' + s) for s in os.listdir(path)] FileNotFoundError: [WinError 3] 系统找不到指定的路径。
最近跟着kaggle做一个医疗项目,加载路径总是出错. 将下面箭头处: 改为: path = os.path.join(data_dir, patient)问题迎刃而解 上面的路径拼接方法可能是ipy ...
- Storm实践(一):基础知识
storm简介 Storm是一个分布式实时流式计算平台,支持水平扩展,通过追加机器就能提供并发数进而提高处理能力:同时具备自动容错机制,能自动处理进程.机器.网络等异常. 它可以很方便地对流式数据进行 ...