今日内容总结
一、三元表达式(简化代码)
二、各种生成式(简化代码)
三、匿名函数(简化代码)
四、常见重要内置函数
五、常见内置函数补充
一、三元表达式
使用场景:在二选一时,推荐使用三元表达式
""" 三元表达式:
数据1 if 条件 else 数据2
在条件成立时则使用数据1(if前面的数据)
在条件不成立时则使用数据2(else后面的数据) """
# 当获取数字为1时,为熊大,否则为熊二
num = input('number>>>:').strip()
res = '熊大' if num == '1' else '熊二'
print(res)
针对if分支结构,也有简化版本
"""子代码块都只有简单的一行情况下,也可以简写,但没有三元表达式简单"""
name = '熊大'
if name == '熊大': print(name)
else: print('熊二')
# 其实就是在缩进下一行时,选择直接在冒号后面添加输出内容
二、各种生成式
1 、列表生成式
# 使用for循环
# 定义一个原列表
name_list = ['熊大', '熊二', '吉吉国王', '光头强', '翠花']
# 在每个名字后面加_YYDS
new_list = []
# 使用for循环获取人名、
for name in name_list:
res = name + '_YYDS'
new_list.append(res)
print(new_list)
# ['熊大_YYDS', '熊二_YYDS', '吉吉国王_YYDS', '光头强_YYDS', '翠花_YYDS']
# 使用列表生成式
name_list = ['熊大', '熊二', '吉吉国王', '光头强', '翠花']
res = [name+'_YYDS'for name in name_list]
print(res)
# ['熊大_YYDS', '熊二_YYDS', '吉吉国王_YYDS', '光头强_YYDS', '翠花_YYDS']
# 只需要两行就可以完成
# 列表生成式还具备筛选能力
name_list = ['熊大', '熊二', '吉吉国王', '光头强', '翠花']
res = [name+'_YYDS'for name in name_list if name !='吉吉国王']
print(res,type(res))
# ['熊大_YYDS', '熊二_YYDS', '光头强_YYDS', '翠花_YYDS'] <class 'list'>
""" 列表生成式中可以使用for和if,不能使用else """
2 、字典生成式
l1 = ['name', 'age','pwd']
l2 = ['蜡笔小新', 5, 10]
# 将两个列表的组成一个字典
使用for循环
new_dict = {}
for i in range(len(l1)):
new_dict[l1[i]] = l2[i] # 字典增加键值对
print(new_dict)
# {'name': '蜡笔小新', 'age': 5, 'pwd': 10}
使用字典生成式
l1 = ['name', 'age','pwd']
l2 = ['蜡笔小新', 5, 10]
res = {l1[i]:l2[i] for i in range(len(l1))}
print(res,type(res))
# {'name': '蜡笔小新', 'age': 5, 'pwd': 10} <class 'dict'>
3 、集合生成式
res = {i for i in range(6)}
print(res, type(res))
# {0, 1, 2, 3, 4, 5} <class 'set'>
三、匿名函数
匿名函数指没有函数名,需要和其他函数一起使用
匿名函数固定语法:
lambda 形参:返回值
lambda x:x+2
如果使用普通函数表示:
def index(x):
return x + 2
eg:
def func(x,y):
return x*y
print(func(3, 4)) # 12
使用匿名函数
func = lambda x,y:x*y
print(func(3, 4)) # 12
1 、max : 统计最大值
# 求最大值
l1 = [12, 13, 15, 20, 25, 38, 46, 50, 74]
print(max(l1)) # 74
求最大工资人的名字
info = {
'Aason':99999,
'Jacob':123,
'zark':16,
'berk':55
}
print(max(info)) # zark
# 结果不是出来的是数字,而是人名,而且还不是第一个人的名字
获取v值:
def index(k):
return info[k]
print(max(info,key=index)) # Aason # 通过key对应函数返回值,max进行比较
若使用匿名函数:
print(max(info, key=lambda key:info[key])) # Aason
"""
max底层可以看成ffor循环比较,针对字典默认只能获取到key,当获取到的是字符串的英文字母的时候,会根据ASCII码表对应的数字进行比较
A ~ Z : 65 ~ 90
a ~ z : 97 ~ 122
"""

四、常见函数内置函数
1 、map映射
map映射就是根据提供的函数对指定的序列做映射
l1 = [12, 24, 28, 34, 65]
需求:元素全部自增6
方法1:利用列表生成式
def index(n):
return n + 6
res = map(index,l1)
print(list(res)) # [18, 30, 34, 40, 71]
方法2:内置函数
res = map(lambda x: x + 6, l1)
print(list(res)) # [18, 30, 34, 40, 71]
2 、zip拉链
从多个数据集中取出元素组合成一个新的数据集,返回一个列表
a = [1, 2, 3]
b = [4, 5, 6]
res = zip(a, b)
print(list(res)) # 因为直接打印res出来是迭代器,所以把它装化成列表打印出来
# [(1, 4), (2, 5), (3, 6)]
zip(*) 与 zip 相反,可理解为解压,返回原始的数据集
a1, a2 = zip(*zip(a,b))
print(list(a1)) # [1, 2, 3]
print(list(a2)) # [4, 5, 6]
'''zip可以整合多个数据集'''
a = [1, 2, 3]
b = [4, 5, 6]
c = ['熊大', '熊二', '翠花']
d = [123, 456, 789]
res = zip(a, b, c, d)
print(list(res))
# [(1, 4, '熊大', 123), (2, 5, '熊二', 456), (3, 6, '翠花', 789)]
不使用zip拉链
a = [1, 2, 3]
b = [4, 5, 6]
c = ['熊大', '熊二', '翠花']
d = [123, 456, 789]
res = [(a[i], b[i], c[i], d[i]) for i in range(len(a))]
print(res)
'''zip在整合多个数据集时,当数据集之间个数不一致,那么依据短的'''
b = [4, 5]
c = ['熊大', '熊二', '翠花']
res = zip(b, c)
print(list(res)) #[(4, '熊大'), (5, '熊二')]
3 、filter过滤
filter过滤函数接收两个参数,第一个为判断函数,第二个为判断对象,第二个的每个元素作为参数传递给判断函数,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
l1 = [4, 5, 6, 7, 12, 14]
# 取出大于10的数字
方法1:利用列表生成式
def index(x):
return x > 10
res = filter(index,l1)
print(list(res)) # [12, 14]
方法2:内置函数
res = filter(lambda x:x>10, l1)
print(list(res)) # [12, 14]
4 、reduce归总
from functools import reduce # 固定
作用就是对序列中的元素进行累积
from functools import reduce
l1 = [1, 2, 3, 4, 5]
res = reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
print(res)
计算的流程就是((((1+2)+3)+4)+5) # 15
五、常见内置函数补充
1、获取绝对值(不考虑绝对值)
print(abs(-123)) # 123
print(abs(123)) # 123
2.all()与any() # 一个是全部,一个是任一
l1 = [2, 0, 1, 1, True]
print(all(l1)) # False 数据集中必须所有的元素对应的布尔值为True返回的结果才是True
print(any(l1)) # True 数据集中只要所有的元素对应的布尔值有一个为True 返回的结果就是True
3.bin() oct() hex() 产生对应的进制数
print(bin(100)) # 0b1100100 二进制
print(oct(100)) # 0o144 八进制
print(hex(100)) # 0x64 十六进制
4.bytes() 类型转换
s = '锄禾日当午'
print(s.encode('utf8')) # b'\xe9\x94\x84\xe7\xa6\xbe\xe6\x97\xa5\xe5\xbd\x93\xe5\x8d\x88'
print(bytes(s, 'utf8')) # b'\xe9\x94\x84\xe7\xa6\xbe\xe6\x97\xa5\xe5\xbd\x93\xe5\x8d\x88'
'''针对编码解码 可以使用关键字encode与decode 也可以使用bytes和str ,bytes为编码、str为解码'''
5.callable() 判断当前对象是否可以加括号调用
name = 'owen'
def index():pass
print(callable(name)) # False 变量名不能加括号调用
print(callable(index)) # True 函数名可以加括号调用
6.chr()、ord() 字符与数字的对应转换
print(chr(71)) # G 根据数字转字符 使用ASCII码
print(ord('d')) # 100 根据字符转数字 使用ASCII码
7.dir()
返回数据类型可以调用的内置方法(查看对象内部可调用的属性)
print(dir(52))
print(dir('owen'))
# 结果太长,不打印了,可以自己使用上面代码试试
# 8.divmod()
"""
可以使用在网站的分页制作上
总共250条数据 每页展示25条 需要多少页 10页
总共300条数据 每页展示25条 需要多少页 12页
总共234条数据 每页展示25条 需要多少页 9页
"""
print(divmod(250,25)) # (10, 0) 第一个参数是整数部分 第二个是余数部分
print(divmod(300,25)) # (12, 0)
print(divmod(234,25)) # (9, 9)
def get_page_num(total_num,page_num): #django分页器使用
more,others = divmod(total_num, page_num)
if others:
more += 1
print('需要%s页'%more)
get_page_num(1688,30) # 需要57页
9.enumerate() 枚举
name_list = ['owen', 'kevin', 'wuxidixi', 'mary']
for i,j in enumerate(name_list):
print(i,j) # i类似于是计数 默认从0开始
0 owen
1 kevin
2 wuxidixi
3 mary
for i,j in enumerate(name_list,start=1):
print(i,j) # 还可以控制起始位置
1 owen
2 kevin
3 wuxidixi
4 mary
10.eval() exec() 识别字符串中的python代码,不常用
print('print("不错不错")') # 不错不错
eval('print("不错不错123")') # 不错不错123
exec('print("不错不错234")') # 不错不错234
res = """
for i in range(10):
print(i)
"""
eval(res) # 报错 只能识别简单逻辑的python代码
exec(res) # 0~9 能够识别具有与一定逻辑的python代码
exec可以执行动态Python代码
eval函数可以计算Python表达式,并返回结果(exec不返回结果)

完毕~