day13三元表达式,列表生成式,生成器表达式,匿名函数,内置函数
三元表达式:
-
语法:
条件成立返回左边的值 if 判断条件 else 条件不成立返回右边的值
# 需求: 让用户输入用户名,输入的用户如果不是tank,为其后缀添加_DSB username = input('请输入用户名:').strip() new_username = username if username == 'tank' else username + '_DSB' print(new_username)
列表生成式:
-
可以一行实现生成列表。
-
语法:
list = [取出的每一个值、任意值 for 可迭代对象中取出的每一个值 in 可迭代对象]
for的右边是循环次数,并且可以取出可迭代对象中每一个值
for的左边可以为当前列表添加值
list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]
list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]
# 列表生成式 # 普通的 new_list = [] for i in range(1, 6): new_list.append(i) print(new_list) #列表 new_list = [i for i in range(1, 6)] print(new_list)
生成器表达式(生成器生成式)
-
1.什么是生成器?
生成的工具,生成器就是自定义的一个迭代器,本质是迭代器 -
若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的额返回值即生成器对象。
-
列表生成式: 若数据量小时采用
优点:
可以依赖索引取值
缺点:
浪费资源
-
生成器生成式:若数据量过大时采用
-
(line for line in range(1, 6))--->g生成器(1, 2, 3, 4, 5)
优点:
节省资源
缺点:
取值不方便
# 生成一个有1000个值的生成器 g = (line for line in range(1, 1000001)) # <generator object <genexpr> at 0x00000203262318E0> print(g) # 列表生成式实现 list1 = [line for line in range(1, 1000001)] print(list1)
匿名函数
-
无名字的函数
左边是参数, 右边是返回值
lambda :
PS: 原因,因为没有名字,函数的调用 函数名 + ()
匿名函数需要一次性使用。
注意: 匿名函数单独使用毫无意义,它必须配合 “内置函数” 一起使用的才有意义
内置函数
-
python内部提供的内置方法
max , min , sorted , map , filter
dict1 = { 'tank': 1000, 'egon': 500, 'sean': 200, 'jason': 500 } print(max(dict1, key=lambda x:dict1[x])) #max,最大。排序根据ASCII自码表排序的 print(min(dict1,key=lambda x:dict1[x]))# 最小的 new_list = sorted(dict1,key=lambda x: dict1[x],reverse=True) print(new_list)