目录
* 一、闭包函数 <https://www.cnblogs.com/nickchen121/p/11106249.html#一闭包函数>
* 二、装饰器 <https://www.cnblogs.com/nickchen121/p/11106249.html#二装饰器>
* 三、三层装饰器 <https://www.cnblogs.com/nickchen121/p/11106249.html#三三层装饰器>
* 四、迭代器 <https://www.cnblogs.com/nickchen121/p/11106249.html#四迭代器>
* 五、三元表达式 <https://www.cnblogs.com/nickchen121/p/11106249.html#五三元表达式>
* 六、列表推导式 <https://www.cnblogs.com/nickchen121/p/11106249.html#六列表推导式>
* 七、字典生成式 <https://www.cnblogs.com/nickchen121/p/11106249.html#七字典生成式>
* 八、生成器表达式 <https://www.cnblogs.com/nickchen121/p/11106249.html#八生成器表达式>
* 九、生成器 <https://www.cnblogs.com/nickchen121/p/11106249.html#九生成器>
* 一十、递归 <https://www.cnblogs.com/nickchen121/p/11106249.html#一十递归>
* 10.1 二分搜索 <https://www.cnblogs.com/nickchen121/p/11106249.html#二分搜索>
* 十一、匿名函数 <https://www.cnblogs.com/nickchen121/p/11106249.html#十一匿名函数>
* 十二、面向过程编程 <https://www.cnblogs.com/nickchen121/p/11106249.html#十二面向过程编程>
一、闭包函数
def f1(): x = 10 def f2(): print(x) # 10 x = 1000 f1() # 10 print(x) # 1000
def f1(): x = 10 def f2(): print(x) # 10 return f2 f = f1() # f2 f() # f2()
* 把函数和变量一起打包拿出去了 def f1(x): def f2(): print(x) # 10 return f2 f3 = f1(10) #
f2 f3() # f2() # 10 f3() # 10 f3() # 10 f4 = f1(5) f4() # 5 f4() # 5
二、装饰器
* 不改变函数体代码,并且不改变函数调用方式,它本质就是一个函数 def f1(x): def f2(): print(x) # 10 return f2
f2 = f1() f2() # f2()
* 完善装饰器 def login_deco(func): def wrapper(*args,**kwargs): login_judge =
login() if login_judge: res = func(*args,**kwargs) return res return wrapper
@login_deco def shopping(): pass # shopping = deco(shopping) # shopping()
三、三层装饰器
def sanceng(x,y): def login_deco(func): print(x,y) def
wrapper(*args,**kwargs): login_judge = login() if login_judge: res =
func(*args,**kwargs) return res return wrapper return login_deco
@sanceng(10,20) def shopping(): pass day20 # shopping = login_deco(shopping) #
shopping()
四、迭代器
* 可迭代对象:具有iter方法的对象(Python中一切皆对象)
* 迭代器对对象:具有iter和next方法
* 迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象(f)
五、三元表达式
六、列表推导式
七、字典生成式
八、生成器表达式
九、生成器
自定义的迭代器,函数内部使用yield关键,有yield关键字的函数只要调用,这个调用后的函数就是生成器
* yield:接收函数返回值,但是会继续执行函数体代码
* return:接收函数返回值,但是会终止函数 def f1(): yield 1 g = f1() # 变成生成器 for i in g:
print(i) # 1
一十、递归
递归本质上就是函数调用函数本身,必须得有结束条件,并且在递归的过程中,问题的规模必须都不断缩小
10.1 二分搜索
def find_num(num,lis): if len(lis) == 1 and lis[0] != num: print('没找到') return
mid_ind = int(len(lis) / 2) # 中间索引 mid_num = lis[mid_ind] # 中间值 if num <
mid_num: lis = lis[:mid_ind] find_num(num,lis) elif num > mid_num: lis =
lis[mid_ind + 1:] find_num(num, lis) else: print('find') lis = [0, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] find_num(20,lis)
十一、匿名函数
lamdbda 参数 : 逻辑代码
* 匿名函数使用一次就失效了,一般不单独使用,与max最大值/min最小值/sorted排序/map映射/filter过滤 连用
max(dic,key=lambda name: dic[name]) max(dic) max(lis/se/tup)
* 内置函数(有空看一看,没空抄一抄)
十二、面向过程编程
类似于工厂的流水线,机械式的一步一步完成一个项目,把完成步骤具体细分,这样步骤与步骤之间互不干涉
缺点:扩展性差,只要有一个步骤断了,项目就崩溃了
优点:清晰优雅
热门工具 换一换