生成器装饰器和异常

生成器装饰器

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值