三元表达式 生成器表达式 匿名函数 内置函数

三元表达式

可以将if... else .. 分支变成一行

语法:

​ 条件成立返回左边的值 if 判断条件 else 条件不成立返回右边的值

#if 判断条件
#   执行
#else:
#   执行
#if判断语句
numb1 = 2
numb2 = 3
if numb1 > numb2:
    print(numb1)
else:
    print(numb2)
 #三元表达式
numb1 = 1
numb2 = 2
numb1 if numb1 >numb2 else numb2

列表生成式

可以一行实现生成列表

语法:

list = [取出的每一个值,任意值 for 可迭代对象中取出的每个值 in 可迭代对象]

for 的右边是循环次数,并且可以取出可迭代对象中的每一个值

for 的左边可以为当前列表添加值

list =[ 值 for 可迭代对象中取出的每一个值 in 可迭代对象]

#将list1中的值,依次取出,添加到new_list中
list1 = [1, 2, 3, 4]
new_list = []
for i in list1:
    new_list.append(i)
    
print(new_list)

生成器表达式

就是生成器生成式

---列表表达式: 数据量小时采用

​ [list for line in range(1,6)] -----> [1, 2, 3, 4, 5 ]

优点:  可以依赖索引取值,取值方便

​ 缺点:浪费资源

---生成器表达式: 数据量大时采用

​ () ----> 返回生成器

​ (line for line in range(1,6)) ---> g生成器(1, 2, 3, 4, 5)

​ 优点: 节省资源

​ 缺点:取值不方便

#生成一个有1000个值的生成器
g = (line for line in range(1,1001))
print(g)
#列表生成式实现
list1 = [line for line in range(1,1001)]
print(list1)

匿名函数

没有名字的函数

:左边是参数,:右边是返回值

lambda :

注意: 由于没有名字

匿名函数需要一次性使用

匿名函数单独使用毫无意义,需要配合内置函数一起使用才有意义

内置函数

内置函数:range() 、 print()、len()

python 内部提供的内置方法:

max、 min、sorted、map、 filter

max 求最大值 min 求最小值

list1 = [1, 2, 3, 4, 5]

max 内部会将list1 中的通过for 取出每一个值,并进行判断

print(max(list1))

dict1 = {
    'tank': 1000,
    'egon': 500,
    'sean': 200,
    'jason': 50
}
print(min(dict1, key=lambda x : dict1[x]))
# sorted 排序 默认升序    reverse: 反转  reverse 默认 False
"""
map : 映射
    map(函数地址,可迭代对象)  ---> map 对象 
map 会将可迭代对象中的每一个值进行修改,然后映射一个 map对象
可以再将 map 对象转换成列表/元祖
注意:只能转换一次 

reduce : 合并
    reduce(函数地址,可迭代对象,初始值)
    reduce中,初始值默认为0 

filter: 过滤
    filter(函数地址,可迭代对象)
"""

map 映射 (使用方法)

name_list = ['egon', 'jason', 'sean', 'tank']
map_obj = map(lambda name: name + '喜欢吃生蚝' if name == 'tank' else name + 'dsb', name_list)
print(map_obj)
print(list(map_obj))
打印结果:
<map object at 0x00000182D780E488>
['egondsb', 'jasondsb', 'seandsb', 'tank喜欢吃生蚝']

reduce 合并 (用法)

#注意,reduce 无法单独使用 需要先调用
from functools import reduce 
每次从可迭代对象中获取两个值进行合并
reduce(lambda x, y : x + y, rangr(1, 101), 0)
需求:
    求1--100的和
普通:
init = 0
for i in rang(1,100):
    init += i
print(init)


reduce :
from functools import reduce
res = reduce(lambda x, y : x + y, range(1,101), 0)
print(res)

filter 过滤 (用法)

name_list = ['egon_dsb', 'sean_dsb', 'jason_dsb', 'tank']

filter_obj = filter(lambda name: name.endswith('_dsb'), name_list)

print(filter_obj)
print(list(filter_obj))

猜你喜欢

转载自www.cnblogs.com/127-2933/p/11867963.html