今日内容
三元表达式
偷懒的写法 为了减少代码的行数
'''雏形'''
username = input('username>>>:'):
if username == 'jason'print('欢迎光临')
else:print('滚蛋')
# 定义一个函数 比较两个数的大小 返回最大哪一个
def func(a, b):
# if a > b:
# return a
# else:
return a if a > b else b
res = func(11,666)
print(res)
三元表达式:仅限于二选一 不建议嵌套使用
res = 123 if 10 > 5 else (222 if 0 else (666 if 1 == 2 else 666)) # 不建议使用
'''三元表达式的语法结构
数据值1 if 条件else 数据值2
如果if后面条件成立 则用if前面的数据值1
如果if后面条件不成立 则用else后面的数据值2
print('欢迎光临') if username == 'jason' else print('滚蛋')
'''
ps:在python中代码不是越精简越好 在保证精简的过程中具有一定的可读性
各种生成式
1.列表生成式
list = ['jason', 'kevin', 'joker', 'tong', 'lisa']
# 将所有名字后缀都加上_NB
# 方式一
new_list = [] # 定义一个新列表
for name in list:
new_name = name + '_NB' # 将_NB在名字后面拼接
new_list.append(new_name) # 添加到新列表中
print(new_list)
# 使用列表的生成式 先执行for循环 在将一个个数据值交给给for循环前面处理
new_list = [name + '_NB' for name in list]
print(new_list)
# 同时还支持if判断 先是for循环 把数据值一个个交给if判断 结果为Ture后交给for前面处理
new_list = [name + '_NB' for name in list if name =='jason']
print(new_list) # [jason_NB]
2.字典生成式
dic = {i: 'joson' for i in range(5) if i == 4}
print(dic) # {4: 'joson'}
3.集合生成式
new_set = {i for i in range(5) if i == 2}
print(new_set) # {2}
生成器可以使用for跟if 但是不能出现else 因为for跟if都可以跟else搭配 会出现歧义
匿名函数
匿名函数就是没有函数名的函数
匿名函数主要是配合一些内置函数一起使用 用于减少代码
单独使用实用性并不大
语法结构
lambda 形参:返回值
具体调用
(lambda x: x + 1)
实际应用
l1 = [1, 21, 24, 56, 223, 55, 843, 228, 325, 455, 565, 646, 666, 4566, 46846, 464665] # 求列表数据值最大的数
res = max(l1)
print(res) # 464665
匿名函数实际应用
关键字:max()求最大值 底层相当于for循环依次取出每一个值来比较 自动帮你取最大的值
new_dict = {'jason': 666,'kevin': 123,'Bason': 99999, 'zero': 888}
res = max(new_dict)
print(res) # zero
new_dict = {'jason': 666,
'kevin': 123,
'Bason': 99999,
'zero': 888
}
res = max(new_dict, key=lambda k: new_dict.get(k))
print(res) # zero
# 当不适用匿名lambda的时候会按照字典的k来比对
# 匿名函数可以利用传参的方式将k对应的值进行一一比较
如果是字符串的话是按照ASCII码表进行比较
大写字母A-Z 65 - 90
小写字母a-z 97 - 122
重要内置函数
关键字:map 映射
l1 = [11, 13, 25, 37, 56, 66]
res = map(lambda x: x + 20,l1) # 将列表的所有数据自增20
print(res) # <map object at 0x00000258CF2F8128>
print(list(res)) # [31, 33, 45, 57, 76, 86]
#
l1 = [11, 13, 25, 37, 56, 66]
res = map(lambda x: x - 20,l1) # 减20
print(res) # <map object at 0x000002B51E12B320>
print(list(res)) # [-9, -7, 5, 17, 36, 46]
'''map底层也是for循环 帮你把一些东西经过处理变成另一种东西'''
关键字:filter 过滤
l1 = ['jason', 'kevin', 'tony', 'lisa']
res = filter(lambda a: a == 'jason', l1)
print(res) # <filter object at 0x000001F286088390>
print(list(res)) # ['jason']
'''配合匿名函数进行过滤'''
关键字:reduce
需要使用from functtools import reduce
from functools import reduce
l1 = [11, 22, 33] # 求所有数之和
res = reduce(lambda x, y: x + y, l1)
print(res) # 66
内部机制第一次取的时候会取两个进行比对 然后将取出的第二个的数依次跟后面的进行比对 还可以在次指定一个值在尾部与比对完得出的数相加
关键字:zip 可以拼接多个数据值 但是必须支持for循环
l1 = [1, 2, 3]
l2 = ['jason', 'kevin', 'oscar']
res = zip(l1, l2)
print(res) # <zip object at 0x000002DFF6322708>
print(list(res)) # [(1, 'jason'), (2, 'kevin'), (3, 'oscar')]
按照位置对应 如果数据个数不一样 按照最短的拼接 能拼接几个就拼接几个
1 = [1, 2, 3, 4, 5, 6, 7]
l2 = [4, 5, 6, 7]
l3 = 'jason'
res = zip(l1, l2, l3)
print(res) # <zip object at 0x000001DE972326C8>
print(list(res)) # [(1, 4, 'j'), (2, 5, 'a'), (3, 6, 's'), (4, 7, 'o')]
每个人将多层装饰器及有参装饰器的执行流程用文字具体描述出来

posted on
浙公网安备 33010602011771号