python之三元表达式与生成式与匿名与内置函数(部分)
三元表达式
三元表达式是if判断语句的简化写法,只适用于if与else连用的情况。
语法结构:
res = 条件成立时返回的值 if 条件 else 条件不成立时返回的值
举例:
"""正常写法"""
if a >= 60:
    res = '及格'
else:
    res = '不及格'
"""三元表达式"""
res = '及格' if a >= 60 else '不及格'
两种写法功能一样,但是三元表达式的代码更加的简洁。

各种生成式
列表生成式(可同样作用于集合)
列表生成式可以快速生成一个我们想要的列表。
比如我想生成一个1到10的列表
l = [i for i in range(1, 11)]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
比如我想生成11到20的列表
l = [i + 10 for i in range(1, 11)]
print(l)
# [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
比如我想把['jason', 'kevin', 'tony', 'oscar', 'jerry']列表的每一个元素后加上'888'
name_list = ['jason', 'kevin', 'tony', 'oscar', 'jerry']
new_name_list = [name + '888' for name in name_list]
print(new_name_list)
# ['jason888', 'kevin888', 'tony888', 'oscar888', 'jerry888']
列表生成式还具备筛选能力,比如我想获取1到10的偶数
l = [i for i in range(1, 11) if i % 2 == 0]
print(l)
# [2, 4, 6, 8, 10]
列表生成式中的if判断不能有else分支

字典生成式
字典生成式可以快速生成一个我们想要的字典。
比如有两组等长的数据,把它们作为键值对的方式存入字典
l1 = ['name', 'age', 'pwd']
l2 = ['jason', 18, 123]
d = {l1: l2 for i in range(len(l1))}
print(d)
# {'name': 'jason', 'age': 18, 'pwd': 123}
字典生成式同样具备筛选能力
l1 = ['name', 'age', 'pwd']
l2 = ['jason', 18, 123]
d = {l1[i]: l2[i] for i in range(len(l1)) if i < 2}
print(d)
# {'name': 'jason', 'age': 18}
匿名函数
匿名函数从字面意思就能看出这应该是一个不透露名字的函数。
语法结构:
lambda 形参:返回值
想必这时候就有人很好奇了,没有名字该如何调用这个函数呢?

案例:
f = lambda x: x + 2
print(f(5))  # 输出:7
"""等价于"""
def f(x):
    return x + 2
print(f(5))  # 输出:7
配合函数使用:
"""max()是获取括号内最大值的函数"""
# 如果括号内只有字典只会比较key值大小
d = {
    'a': 52,
    'b': 2,
    'c': 24,
    'd': 33,
    'e': 15
}
print(max(d))  # 输出:e
"""如果想比较value值大小,这个时候就可以用到匿名函数了"""
# max()里可以传函数进去
print(max(d, key=lambda x: d[x]))  # 输出:a
重要内置函数
map()
可以配合函数更改数据集数据
比如我想要将列表中的数据都自减11
l1 = [11, 22, 33, 44, 55]
res = map(lambda x: x - 11, l1)  # 返回的是一个对象
print(res)  # 输出:<map object at 0x00000171A22DC400>
# 将map()返回的对象转成列表类型
res = list(res)
print(res)  # 输出:[0, 11, 22, 33, 44]
zip()
将括号内的数据集的每一个元素一一对应,每一个对应的元素放到一个元组中,再把这些元组放到列表中
l1 = ['name', 'age', 'pwd']
l2 = ['jason', 18, 123]
res = zip(l1, l2)  # 返回的是一个对象
print(res)  # 输出:<zip object at 0x00000180997CF0C8>
# 将zip()返回的对象转成列表类型
res = list(res)
print(res)  # 输出:[('name', 'jason'), ('age', 18), ('pwd', 123)]
如果数据集个数不对应,会按照短的来
l1 = ['name', 'age', 'pwd', 'sex']
l2 = ['jason', 18, 123]
res = zip(l1, l2)
print(list(res))  # 输出:[('name', 'jason'), ('age', 18), ('pwd', 123)]
括号内的数据集可以有数个
l1 = [11, 22, 33]
l2 = ['jason', 'kevin', 'tony']
l3 = [1, 2, 3]
l4 = [55, 66, 77]
res = zip(l1, l2, l3, l4)
print(list(res))
# 输出:[(11, 'jason', 1, 55), (22, 'kevin', 2, 66), (33, 'tony', 3, 77)]

filter()
可以配合函数筛选数据集,过滤掉不符合的数据
比如我只要一个列表中的偶数
l1 = [11, 22, 33, 44, 55, 66]
res = filter(lambda x: x % 2 == 0, l1)  # 返回的是一个对象
print(res)  # 输出:<filter object at 0x000001B755A0C400>
# 将filter()返回的数据转换为列表
res = list(res)
print(res)  # 输出:[22, 44, 66]
reduce()
配合函数将数据集中的元素进行积累运算
比如我先把列表中的所有元素相加
# 使用前需要导入模块
from functools import reduce
l1 = [11, 22, 33]
res = reduce(lambda x, y: x + y, l1)  # 返回的是一个值
print(res)  # 输出:66
把列表所有元素相乘
# 使用前需要导入模块
from functools import reduce
l1 = [10, 20, 30]
res = reduce(lambda x, y: x * y, l1)  # 返回的是一个值
print(res)  # 输出:6000
常见内置函数(部分)
常见内置函数有很多,这里先列举部分常见内置函数
| 函数 | 作用 | 用法 | 
|---|---|---|
| abs(x) | 获取x的绝对值 | >>> abs(-100) 100 | 
| all(x) | x中的元素全部为True才会返回True,否则返回False | >>> all([0, 1, 1, True]) False | 
| any(x) | x中的元素有一个为True就返回True,全为False才会返回False | >>> any([True, 0, False]) True | 
| bin(x) | 将x转为二进制 | >>> bin(15) '0b1111' | 
| oct(x) | 将x转为八进制 | >>> oct(15) '0o17' | 
| hex(x) | 将x转为十六进制 | >>> hex(15) '0xf' | 
| bytes(x,y) | 相当于encode解码,将x转换成指定编码y | >>> bytes('你好', 'utf8') b'\xe4\xbd\xa0\xe5\xa5\xbd' | 
| callable(x) | 判断x是否可以被调用,就是能否x() | >>> x = 5 >>> callable(x) False >>> def index(s): ... return index >>> callable(index) True | 
| chr(x) | 将ASCII码转成字符 | >>> chr(65) 'A' | 
| ord(x) | 将字符转成ASCII码 | >>> ord('A') 65 | 
| dir(x) | 获取x的可调用的所有方法,不添加参数时获取所在范围的所有方法 | >>> dir(5) ['__abs__', '__add__', '__and__', '__bool__'...] | 
| divmod(x, y) | 返回x // y和 x % y | >>> divmod(250, 25) (10, 0) >>> divmod(249, 25) (9, 24) >>> divmod(251, 25) (10, 1) | 
| enumerate(x, y) | 一般用在for循环中,y不写就是从0开始,返回x的每一个元素和y,每返回一个元素,y的值就会加1 | >>> for i,j in enumerate(['a', 'b', 'c']): ... print(i, j) 0 a 1 b 2 c | 
| eval(x) | 可以识别简单逻辑的字符串代码 | >>> eval('abs(-100)') 100 | 
| exec(x) | 可以识别复杂逻辑的字符串代码 | >>> exec( ... """ ... for i in range(3): ... print(i) ... """ ... ) 0 1 2 | 

python之三元表达式与生成式与匿名与内置函数(部分)的更多相关文章
- python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04
		递归 递归: # 函数在调用阶段直接或间接地又调用了自身 应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点) --> l = [1, [2, [3, [4, [5, ... 
- python基础12_匿名_内置函数
		一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ... 
- Python——day14 三目运算、推导式、递归、匿名、内置函数
		一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系 cmd = input ... 
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
		生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ... 
- python基础之递归,匿名,内置函数
		递归函数: 什么是递归函数? 函数递归调用:在调用一个函数的过程中,又直接或间接地调用了该函数本身. 递归必须要有两个明确的阶段: ①递推:一层一层递归调用下去,强调:每进入下一层问题规模减少 ②回溯 ... 
- python基础之生成器表达式形式、面向过程编程、内置函数部分
		生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ... 
- python学习笔记(五):装饰器、生成器、内置函数、json
		一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ... 
- Day 14 三元运算符,列表推导式,内置函数
		三目运算符 ```python# 三目(元)运算符:就是 if...else...语法糖# 前提:简化if...else...结构,且两个分支有且只有一条语句# 注:三元运算符的结果不一定要与条件直接 ... 
- python成长之路第三篇(3)_内置函数及生成器迭代器
		打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.lambda表达式 2.map内置函数 3.filter内置函数 4.reduce内置函数 5.yield生成器 ... 
随机推荐
- 告别尬聊,解锁秀场+社交新玩法(内含源码+Demo)
			直播已成为用户的生活习惯之一 艾媒咨询数据显示:2021年直播用户规模达到6.35亿人,在线直播用户以年轻群体为主,24岁及以下用户占比49%,30岁以下用户接近8成. 众所周知,Z世代用户是一个社交 ... 
- Nuxt.js的踩坑指南(常见问题汇总)
			本文会不定期更新在nuxt.js中遇到的问题进行汇总.转发请注明出处,尊重作者,谢谢! 强烈推荐作者文档版踩坑指南,点击跳转踩坑指南 在Nuxt的官方文档中,中文文档和英文文档都存在着不小的差异. 1 ... 
- 【weex开发】weex官方源码
			公司目前使用版本:weex_sdk:0.10.0 介绍地址:https://bintray.com/alibabaweex/maven/weex_sdk/0.18.0 weex最新版本:weex_sd ... 
- activity-alias属性的使用
			activity-alias是Android里为了重复使用Activity而设计的.1. 含义和作用: 对于activity-alias标签,它有一个属性叫android:targen ... 
- JSDOM基础
			JavaScript 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素. HTML DOM 模型被构造为对象的树: HTML DOM 树 JavaScript 能够改变页 ... 
- JavaScript 中 append()、prepend()、after()、before() 的区别
			内容 append().prepend().after().before() 的区别 jQuery 操作 DOM 之添加节点 方法名 作用 $(selector).append() 指定元素内部添加, ... 
- Python程序的流程
			1 """ 2 python程序的流程 3 """ 4 # ------------- 分支结构---------------- 5 # i ... 
- c语言实现循环单链表
			//初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); head->next=NULL; head->data=-1; ... 
- show binary logs
			列出服务器上的二进制日志文件.该语句用作" purge binary logs语句"中描述的过程的一部分,该过程显示了如何确定可以清除哪些日志. show binary logs ... 
- 面渣逆袭:RocketMQ二十三问
			基础 1.为什么要使用消息队列呢? 消息队列主要有三大用途,我们拿一个电商系统的下单举例: 解耦:引入消息队列之前,下单完成之后,需要订单服务去调用库存服务减库存,调用营销服务加营销数据--引入消息队 ... 
