装饰器和异常
通过yield关键字将函数对象变成迭代器对象,这种叫做生成器
生成器的本质就是迭代器
##def func():
print(111)
yield 1
print(222)
yield 2
print(333)
yield 3
斐波那契数列
end是次数
##def fib(end):
# n是初始次数值,a,b都是开始的两个值
n,a,b = 0,0,1
while n<end:
a,b = b,a+b
yield b
n += 1
装饰器
装饰器的本质就是利用了闭包
调用的时候以一个回调的形式去使用
##def func(f):
def func1(x):
x = x*10
f()
print(‘我是额外增加的函数’)
return x
return func1
使用装饰器
##@func
##def test():
print(‘我是基础函数’)
##@func
##def test1():
print(‘我也是基础函数’)
内置装饰器
##class Person():
def init(self,name,age):
self.name = name
self.age = age
# 让调用方法可以像调用属性一样
@property
def play(self):
print(‘这是PLAY方法’)
# 第一个参数自动传入类
@classmethod
def learn(cls):
print(‘这是LEARN方法’)
#不再需要传入self或者cls,静态方法
@staticmethod
def sleep():
print(‘这是SLEEP方法’)
##anyan = Person(‘anyan’,18)
#错误查找的顺序:从下往上
异常
##open(‘a111111.py’,‘r’)
##print(111)
##def a():
print(111)
##def b():
a()
##def c():
b()
##c()
放可能会出现异常的代码
##try:
print(aaa)
抛出异常或者返回异常
##except NameError as e:
print(‘变量名错误,错误信息:%s’%e)
##except TypeError as e:
print(‘类型错误,错误信息:%s’%e)
Exception是所有异常的父类
##except Exception as e:
print(‘未知错误’)
当try里面的代码没有错误的时候,就会执行else的代码
##else:
print(‘未发生错误’)
上面执行完就会执行finally的代码
##finally:
print(‘不管有没有错误,我都执行’)
主动抛出异常
##raise TypeError
断言,如果条件不成立就会报断言的错误
测试代码
assert 1==1
print(1)