上节课复习:
1、模板
def outer(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs): return res return wrapper @outer def index(): pass
今日内容
1、三元表达式
2、生成式
列表生成式
字典生成式
生成器表达式 ---> 自定义的迭代器
3、函数递归
4、匿名函数
5、内置函数
6、面向过程编程
三元表达式
res = 条件成立时返回的值 if 条件 else 条件不成立时返回的值
x = 11 y = 12 res = x if x>y else y print(res) # 12
生成式:
1)列表生成式
列表生成式语法是固定的,[]里面for 前面是对列表里面数据的运算操作,后面跟平常for循序一样遍历去读取。运行后会自动生成新的列表
l = [] for i in range(10): l.append(i) print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] res = [x for x in range(10)] print(res) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 案例一: res = [x for x in range(10) if x > 5] print(res) # 案例二: names = ['lxx','hxx','wxx','lili'] res = [ name+'sb' for name in names] print(res) # ['lxxsb', 'hxxsb', 'wxxsb', 'lilisb'] # 案例三: names = ['egon','lxx_sb','hxx_sb','wxx_sb'] res = [name for name in names if name.endswith('sb')] print(res) # ['lxx_sb', 'hxx_sb', 'wxx_sb']
2)字典生成式
res = {i:i**2 for i in range(5)} print(res) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} items = [('k1',111),('k2',222),('k3',333)] print(dict(items)) # {'k1': 111, 'k2': 222, 'k3': 333} print({k:v for k,v in items}) # print({k:v for k,v in items}) #
3)集合生成式
res = {i for i in range(5)} print(res)
4)生成器表达式
res = (i for i in range(3)) print(next(res)) print(next(res)) print(next(res))
函数递归
在调用一个函数的内部又调用自己,所以递归调用的本质就是一个循环的过程
大前提:递归调用一定要在某一层结束
递归的两个阶段:
1、回溯:向下一层一层挖井
2、递推:向上一层一层返回
items=[[1,2],3,[4,[5,[6,7]]]] def func(items): for x in items: if type(x) is list: # 满足未遍历完items以及if判断成立的条件时,一直进行调用 func(x) else: print(x,end=' ') func(items)
二分法:
func_int = 9 num = [-3,-2,0,55,66,77,88,99,101] def find(num,find_num): print(num) if len(num) == 0: print('not exists') return res = len(num) // 2 # 4 msg = num[res] # 66 if func_int > msg: find(num[res+1:],find_num) pass elif func_int < msg: find(num[:res],find_num) else: print('fund_int') find(num,func_int)
匿名函数:没有名字的函数
特定:临时用一次
salariex = { 'egon':3000, 'tom':100000, 'zxx':100 } print(max(salariex,key= lambda key:salariex[key])) # tom print(min(salariex,key= lambda key:salariex[key])) # zxx # 默认从小到大 print(sorted(salariex,key= lambda key:salariex[key])) # ['zxx', 'egon', 'tom'] # 从大到小 print(sorted(salariex,key= lambda key:salariex[key],reverse=True)) # ['tom', 'egon', 'zxx']
了解:
# map names = ['lxx','hxx','lili'] l = [name + 'sb' for name in names] res = map(lambda name:name+'sb',names) print(list(res)) # print(res.__next__()) # filter names = ['lxx_sb','hxx','lili_sb','egon'] res = [name for name in names if name.endswith('sb')] print(res) # ['lxx_sb', 'lili_sb'] res = filter(lambda name:name.enfswith('sb'),names) print(list(res)) # reduce from functools import reduce res = reduce(lambda x,y:x+y,[1,2,3]) print(res) # 6
面向过程编程
面向过程编程:
核心是“过程”二字,过程就是解决问题的步骤,即先干啥,再干啥,后干啥
所以基于该思想编写程序就好比设计一条一条的流水线
优点:复杂的问题流程化,进而就简单化
缺点:牵一发而动全身、扩展性差