生成器装饰器
1.生成器
生成器通过yield关键字将函数对象变成可迭代对象,这种叫做生成器。
生成器的本质就是迭代器
生成器通过yield关键字生成,可进行数据的接收和发送
不定义类直接用函数
def func():
print(111)
yield 1
print(222)
yield 2
print(333)
yield 3
→调用 a=func()
next(a)
2.斐波那契数列
def fib(end): end是次数
n,a,b=0,0,1 n是初始次数值,a,b都是开始的两个值
while n<end:
a,b=b,a+b
yield b
n+=1
→调用 a=fib()
next(a)
3.装饰器(自定义)
装饰器的本质就是利用了闭包,调用的时候以一个回调的形式去使用。
闭包就是外层函数返回内层函数
回调就是把函数的函数体test当做func的参数f去使用
def func(f): 一定要有参数
def func1(): func1有参数的时候,在调用时把参数test(10参数)即可
f() 调用f()就可以两个都打印
print('我是额外增加的函数')
return func1
@func() @函数名
def test():
print('我是基础函数')
@func
def test():
print('我也是基础函数')
→调用 test()
调用的过程:test→(当做参数)f执行func1→return func1→func1()→print
4.内置装饰器(对于类去使用)
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
@property property让调用方法可以像调用属性(不用加括号 anyan( ))一样
def play(self):
print('这是SELF方法')
@classmethod 第一个参数自动传入类 传参:Person.learn(Person),自动传参:Person.learn()
def learn (cls):
print('这是LEARN方法')
@staticmethod def函数不需要传入self或cls,静态方法
def sleep():
print('这是SLEEP方法')
anyan=Person('anyan',18) 实例化一个对象
异常
1.异常
错误查找(从下到上)
try: try放可能会出现异常的代码
print(1)
except NameError as e: 抛出异常或返回异常
print('变量名错误错误信息为: %s'%e)
except TypeError as e:
print('类型错误,错误信息: %s'%e)
except Exception as e: Exception是所有异常的夫类
print('未知错误')
else: 当try里面的代码没有错误时,就会执行else里面的代码
print('未发生错误')
finally: 上面执行完,会执行finally里面的代码
print('不管有没有错误都会执行')
2.主动抛出异常:raise TypeError
3.断言,如果条件不成立就会报断言的错误
测试代码
assert==1
print(1)