一,装饰器
在原有的函数前面增加功能,且不改变原函数的调用方式。
1 def wrapper1(func): 2 def inner1(): 3 print('wrapper1 ,before func') 4 func() # f 5 print('wrapper1 ,after func') 6 return inner1 7 8 def wrapper2(func): # inner1 9 def inner2(): 10 print('wrapper2 ,before func') 11 func() # inner1 12 print('wrapper2 ,after func') 13 return inner2 14 15 @wrapper2 16 @wrapper1 17 def f(): 18 print('in f') 19 20 f()
装饰器的固定形式
1 def timer(func): 2 def inner(*args,**kwargs): 3 4 re = func(*args,**kwargs) 5 6 return re 7 return inner
二,迭代器
可迭代协议:内部含有_iter_方法的都是可迭代的
迭代器协议:内部含有_iter_方法和_next_方法
什么是迭代器 迭代器 = iteration(可迭代的),自带一个_next_方法
1 def average(): 2 sum_money = 0 3 day = 0 4 avg = 0 5 while True: 6 money = yield avg 7 sum_money += money 8 day += 1 9 avg = sum_money/day 10 11 g = average() 12 next(g) 13 print(g.send(200)) 14 print(g.send(300)) 15 print(g.send(600))
凡是可作用于for
循环的对象都是Iterable
类型
凡是可作用于next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列
三,程序报错
摘取了一些博客上的常见报错信息
IOError 输入/输出异常;基本上是无法打开文件
IndentationError 语法错误(的子类) ;代码没有正确对齐
KeyError 试图访问字典里不存在的键
NameError 使用一个还未被赋予对象的变量
UnboundLocalError 试图访问一个还未被设置的局部变量,
最近在模拟sql语句时对where的条件判断理解较差,希望能和大家共同进步