python基础-匿名函数和内置函数
匿名函数和内置函数
匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数。
语法:lambda 参数:返回值
使用方式:
- 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用有名函数)
res = lambda x,y:x*y
print(res(2,3)) # 打印结果:6
- 与内置函数一起使用,如:max,min,sorted,map,filter,reduce
内置函数就是python解释器给我们提供的函数。
max 返回给定参数的最大值,这个参数可以是可迭代对象
语法:max(可迭代对象,key=函数对象)
min 返回给定参数的最小值,这个参数可以是可迭代对象
语法:min(可迭代对象,key=函数对象)
# 需求:求出以下工资最高和工资最低的员工
user_dic = {
'赵铁柱': 3000,
'张全蛋': 20000,
'伍六七': 1500,
'李小花': 8000
}
s_max = max(user_dic, key=lambda x: user_dic[x])
"""
1.max内部会遍历user_dic,将遍历结果一一传给lambda的参数x
2.依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值
3.对外返回最大的遍历值
"""
print(f"工资最高的员工是:{s_max}")
s_min = min(user_dic, key=lambda x: user_dic[x])
print(f"工资最低的员工是:{s_min}") # 原理跟max 类似
sorted 接收一个key函数(可选)来实现对可迭代对象进行自定义的排序
语法:sorted(可迭代对象,key=函数对象,reverse=False)
reverse:排序方向,默认从小到大,reverse=True为降序
# 1、对列表按照绝对值进行排序
li = [-21, -12, 5, 9, 36]
print(sorted(li, key=lambda x: abs(x)))
"""
sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:
keys使用lambda函数排序结果 => [5, 9, 12, 21, 36]
| | | | |
最终结果 => [5, 9, -12, -21, 36]
"""
# 2、假设我们用一组tuple表示学生名字和成绩:
L = [('sean', 75), ('egon', 92), ('Jessie', 66), ('tank', 88)]
# 2.1 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
"""
1.sorted内部会遍历L,将遍历结果一一传给lambda的参数x
2.依据lambda的返回值依次进行排序,得到排序后的list列表
3.对外返回排序后的列表
"""
# 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
# 2.2 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
map 映射。将可迭代对象中的每一个值进行修改,然后映射到一个map 对象中,可将这个map 对象转换其他容器类型展示结果。只能转换一次
语法:map(函数对象,可迭代对象)
# 1、求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表
# 常规解决方案
list1 = [1,2,3,4,5,6,7,8,9]
li = []
for i in list1:
i = i ** 2
li.append(i)
print(li)
# 使用map 的解决方案
map_obj = map(lambda x: x * x, li)
print(map_obj) # 打印结果为 map对象
print(list(map_obj)) # 将map 对象转换成列表展示
print(tuple(map_obj)) # 打印为空 ???
从以上打印结果可以发现,map_obj 转换两次,再次打印的结果是空。这是咋了,放心,这个结果没被我吃掉!!!这是因为map对象本质是可迭代对象 。**list(map_obj) **或 for num in map_obj 这样的语句,就是调用了迭代器,执行了__ next __(),消耗了迭代对象。所以,再次使用map_obj后,会发现它已经空了。
reduce 合并。每次从可迭代对象中获取两个值进行累积计算。其效果就是:
reduce(func,[1,2,3]) 等同于 func(func(1,2),3)
语法:reduce(函数对象,可迭代对象,初始值)
注意:
使用reduce 函数,必须导包 from functools import reduce
在求和时,初始值默认为0;求乘积时,初始值为1
from functools import reduce
# 求1-100之内的和
res_sum = reduce(lambda x, y: x + y, range(1, 101), 0)
print(res)
# 求1-9的积
res_pro = reduce(lambda x, y: x * y, range(1, 10))
print(res_pro)
filter 过滤。根据函数中返回值是
True还是False决定保留还是丢弃该元素。如果是True就“过滤出来”,并添加到filter 对象中。语法:filter(函数对象,可迭代对象)
# 求列表['1A','2A','3C','4C','5A']中,返回不包含A的列表
key_list = ['1A','2A','3C','4C','5A']
filter_obj = filter(lambda key:key.endswith('C'),key_list)
print(filter_obj) # 打印filter 对象 ---->
print(list(filter_obj)) # 将filter 对象转换成列表展示
print(tuple(filter_obj)) # 打印出空元组,原理同map 对象
从上述代码可以发现,filter 对象本质上也是一个可迭代对象
扩展题
1、请利用filter()筛选出200以内的回数。回数是指从左向右读和从右向左读都是一样的数,例如12321,909
2、现有列表 L = ["1","2","3","5","7","8","4","9","6"]
1) 求列表中所有偶数组成的最大整数
2) 求列表中所有奇数组成的最小整数
python基础-匿名函数和内置函数的更多相关文章
- python基础之 装饰器,内置函数
1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使用外部变量(非全局变量)叫做闭包! def wrapper(): money =10 def inner(num) ...
- 【python基础语法】常用内置函数、关键字、方法和之间的区别(小结)
''' 关键字: False:bool数据类型 True:bool数据类型 None:表示数据的内容为空 and:逻辑运算符:与 or:逻辑运算符:或 not:逻辑运算符:非 in:身份运算符,判断变 ...
- Python基础(七)内置函数
今天来介绍一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. 1 2 3 ...
- Python基础(十一)--内置函数
内置函数 数学类 abs():绝对值 round():四舍五入 >>> round(1.3747,1) 1.4 sum():求和 >>> sum({1:'dj',2 ...
- 【python基础】常用的内置函数
python基础之内置函数 参考: http://www.runoob.com/python/python-built-in-functions.html -zip() zip函数接受任意多个(包括0 ...
- python基础学习1-类相关内置函数
#!/usr/bin/env python # -*- coding:utf-8 -*- #===issubclass(class,classinfo) 检查class是否是classinfo类的子类 ...
- Python基础(六)-内置函数
map().filter().reduce() map(func,iterator) --> filter(func,iterator) --> reduce(func,iterato ...
- python基础知识15---三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
阅读目录 一 三元表达式.列表推导式.生成器表达式 二 递归与二分法 三 匿名函数 四 内置函数 五 阶段性练习 一. 三元表达式.列表推导式.生成器表达式 1 三元表达式 name=input('姓 ...
- Python 入门基础12 --函数基础5 匿名函数、内置函数
今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...
- python基础之函数式编程、匿名函数、内置函数
一 函数式编程 不修改外部状态. 模仿数学里得函数进行编程. 用函数编程写出得代码相当精简. 可读性比较差. 例子: y=2*x+1 x=1 def test(x): return 2*x+1 tes ...
随机推荐
- springboot 自定义LocaleResolver切换语言
springboot 自定义LocaleResolver切换语言 我们在做项目的时候,往往有很多项目需要根据用户的需要来切换不同的语言,使用国际化就可以轻松解决. 我们可以自定义springboor中 ...
- Vue学习系列(二)——组件详解
前言 在上一篇初识Vue核心中,我们已经熟悉了vue的两大核心,理解了Vue的构建方式,通过基本的指令控制DOM,实现提高应用开发效率和可维护性.而这一篇呢,将对Vue视图组件的核心概念进行详细说明. ...
- Redis实战篇
Redis实战篇 1 Redis 客户端 1.1 客户端通信 原理 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 . 客户端和服务器发送的命令或数据一律以 \r\n ...
- 【Labview入门】工具的使用
labview版本:Labview2015 在你使用labview时你可能已经发现,在鼠标移动到连线上时,鼠标会自动的变化,其实这是你选择了自动识别的工具,然后鼠标会根据你所指示的东西自动切换工具类型 ...
- Linux::mysql-connector-c++
.安装好boost. .从官网下载mysql connector c++版本. .解压,复制 include/jdbc/cppconn 文件夹复制,到/usr/local/include/cppcon ...
- oracle计算两个时间的差值(XX天XX时XX分XX秒)
在工作中需要计算两个时间的差值,结束时间 - 开始时间,又不想在js里写function,也不想在java里去计算,干脆就在数据库做了一个函数来计算两个时间的差值.格式为XX天XX时XX分XX秒: 上 ...
- 5G:今天不谈技术,谈谈需求和应用
4G改变生活,5G改变社会.随着2019年5G手机的发布,5G时代已经拉开帷幕,无数嗅觉灵敏的投资人和创业者在研究5G行业的投资机会. 但是,市场研究侧重于技术细节与上游产业链设备投资居多,对于贴近消 ...
- 百万年薪python之路 -- Socket
Socket 1. 为什么学习socket 你自己现在完全可以写一些小程序了,但是前面的学习和练习,我们写的代码都是在自己的电脑上运行的,虽然我们学过了模块引入,文件引入import等等,我可以在程序 ...
- springcloud之Feign、ribbon设置超时时间和重试机制的总结
一 超时时间配置 如果在一个微服务当中对同一个接口同时配置了Hystrix与ribbon两个超时时间,则在接口调用的时候,两个计时器会同时读秒. 比如,访问一个接口需要2秒,你的ribbon配置的超时 ...
- Prometheus 介绍详解
Prometheus 介绍 Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统.自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区.为强调开源及独立维护,P ...