目录
三元表达式是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
可以配合函数更改数据集数据
比如我想要将列表中的数据都自减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]
将括号内的数据集的每一个元素一一对应,每一个对应的元素放到一个元组中,再把这些元组放到列表中
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)]
可以配合函数筛选数据集,过滤掉不符合的数据
比如我只要一个列表中的偶数
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]
配合函数将数据集中的元素进行积累运算
比如我先把列表中的所有元素相加
# 使用前需要导入模块
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
手机扫一扫
移动阅读更方便
你可能感兴趣的文章