三元表达式 各种生成式 匿名函数 匿名集合内置函数使用 重要内置函数
三元表达式
三元表达式在二选一的情况下使用
不建议嵌套使用
#他的存在就是为了减少代码层级
#当条件为true 返回前者 条件为false 返回后者
condition_is_true if condition else condition_is_false
应用场景
#1. 比较两个数字的大小(优化前)
def bigger_num(a, b):
if a>b
return a
else
return b
res = big_num(a, b)
print(res)
# 优化后
def bigger_num(a,b)
return a if a>b else return b
res = bigger_num(a,b)
print(res)
ps: 在用python编写的时候,不是越精简越好,而是在精简的基础上确保代码的可读性(思路清晰易懂)
各种生成式
列表生成式
作用:一次性以相同的操作处理列表中的多个数据值
在列表的生成式中只能出现for和if 其他都不可使用
列表生成式的使用频率最高
应用场景
name_list = ['686', 'coco','v10', 'jojo','m','bobo']
#需求:给上述列表中的所有数据添加UCD_前缀
#优化前
name_list = ['686', 'coco', 'v10', 'jojo', 'M', 'bobo']
new_list = []
for name in name_list:
new_name = 'UCD_' + name
new_list.append(new_name)
print(new_list)
#优化后
new_list = ['UCD_' + name for name in name_list]
print(new_list)
#执行结果
['UCD_686', 'UCD_coco', 'UCD_v10', 'UCD_jojo', 'UCD_M', 'UCD_bobo']
#还支持if判断 添加需求不给Lin添加UCD_并删除Lin
name_list = ['686', 'coco','v10', 'jojo','m','bobo', 'lin']
new_list = ['UCD_' + name for name in name_list if name != 'lin']
#执行结果
['UCD_686', 'UCD_coco', 'UCD_v10', 'UCD_jojo', 'UCD_M', 'UCD_bobo']
#先执行for循环 然后将每一个数据值交给if判断 若成立(true)则返回for循环前面进行处理
字典生成式
与列表生成式类似 先执行for循环然后拿到for循环每一个值 接着用if判断 最后交给for循环前处理
new_dict = {i: 'john' for i in range(9) if i > 6}
print(new_dict)
结果为
{7: 'john', 8: 'john'}
集合生成式
new_set = {i for i in range(12) if i != 6}
print(new_set)
#结果为
{0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11}
注意元组是唯一不在生成器范畴,而是后面重点讲解的迭代器知识
匿名函数
定义
没有名称定义的函数称之为匿名函数
# python中匿名函数的语法为
lambda arguments: expression
匿名函数可以这么理解
若之前学的函数:def func()是有名函数
那么func = lambda x,y :
常见内置函数
max()
l1 = [321,3124,5346,74465,765,345,23453,6574,756,435,3425,6547,543,234,6457,687,6567,68987,6,54,43564]
#1.假设有这一列数据 需要取其最大值
res = max(l1)
print(res)
结果为
74465
#结合字典使用
#2.找出以下伤害最高的选手
#错误示范
dic = {
'john': 3000,
'ran' : 200,
'zzr' : 500,
'Awu' : 100
}
res = max(dic)
print(res)
结果为
'''john'''
# max方法的底层其实就是for循环,字典在参与for循环的时候,只有字典的键参与循环,比较的是键的首字母的ASCII码。
#正确解法1
res = max(dic, key=lambda k: dic.get(k))
print(res)
'''john'''
#正确解法2
def index(k):
return dic.get(k)
res = max(dic, key=index)
print(res)
min()
与max()的原理相同,参考max()的运用
重要内置函数
map()
用map()可以对容器内所有数据执行相同操作
l1 = [100,110,120,110,111,333]
# 需求:将列表内所有数据值自减1
res = map(lambda x:x-1, l1)
print(list(res))
filter()
使用filter可以删除列表内的数据值
l1 = ['686','coco', 'v10', 'jojo','lin']
#需求是移除列表内的Lin
res = filter(lambda a:a != 'lin', l1)
print(list(res))
reduce()
化整为零的过程(对参数列表中多个数据进行累积)
l1 = [12321, 324, 324, 2352, 123, 4532]
# 需求是求列表中所有数据的总和 再加20
from functools import reduce #Python3.x reduce()被移到functools模块里,如果要使用则需要引入functools模块来调用reduce()函数:
res = reduce(lambda x, y: x + y, l1,20)
print(res)
zip()
zip()用于将可迭代的对象作为参数,并将对象中对应的元素打包成元组,然后返回由这些元组组成的列表
n1 = ['686', 'coco', 'jojo']
n2 = [1, 2, 1]
n3 = ['m4', 'ak', 'm4']
res = zip(n1, n2, n3)
print(list(res))
#结果
'''
[('686', 1, 'm4'), ('coco', 2, 'ak'), ('jojo', 1, 'm4')]
'''
多层装饰器及有参装饰器的执行流程单独一篇详写