装饰器
用于拓展原有函数功能的一种函数
返回函数的函数
在不用更改原函数的代码前提下给函数增加新的功能
@funcname 直接在函数名前加@调用
def log(func):
def wrapper():
print('...开始...')
func()
print('结束')
return wrapper
@log
def hello():
带参数的装饰器
def log(name=none):
def decortor(func)
def wrapper():
print('...开始.{}..'.format(name))
func()
print('结束')
return wrapper
return decortor
*args 用来将参数打包成tuple给函数体调用
**kwargs 打包关键字参数成dict给函数体调用
@wraps(func) 不改变使用装饰器原有函数的结构(如__name__, __doc__)
类的装饰器
def eat(cls):
cls.eat=lambda self:print('{0}>要吃东西'.format(self.name))
return cls
@eat
迭代器
迭代 意味着重复多次,想象循环那样
实现了方法__iter__的对象是可迭代的,而实现了方法__next__的对象是迭代器
调用方法__next__时,迭代器返回其下一个值
如果迭代器没有可供返回的值,触发Stoplteration异常
从迭代器创建序列
通过对可迭代对象调用内置函数iter,可获得一个迭代器
生成器
是一种使用普通函数语法定义的迭代器
包含yield语句的函数被称为生成器
不使用return返回一个值,而是可以生成多个值,每次一个
每次使用yield生成一个值后,函数都将冻结,即在此停止执行
被重新唤醒后,函数将从停止的地方开始继续执行
raise StopIterration 实现next结束
异常
内置异常
Exception 几乎所有异常类都从它派生而来
捕获异常
try........ except....
捕获指定异常 except TypeError:
捕获指定多个异常: except(ZeorDivisonError,TypeError):
打印异常: except(ZeorDivisonError,TypeError) as err:print(err)
try..except..finally 必须执行的部分
自定义异常
通过继承自Exception类来自定义异常
先抓小,后抓大
抛出异常及异常的传递
如果异常产生的地方不捕获,那么它会一层一层往上传递