我们今天来讲讲Python的装饰器和异常处理与分析,这篇内容讲完之后Python的基础内容就只剩下正则表达式了,结束了Python的基础知识后我决定给大家讲讲数据库的相关知识,不过在此之前我要先带大家了解一下虚拟机的基本操作,废话不多说了,让我们开始今天的内容!
装饰器和异常处理与分析- 一.生成器
- 二.装饰器
- 三.异常
- 四.错误查找
- 五.作业
生成器又叫迭代器
我们来思考一个问题:
我们先来给大家讲一下yield 关键字 :
可以阻塞代码的运行 只有执行迭代的话 才会执行代码
yield 可以返回内容 返回内容可以使用变量进行接收
给大家举个例子:
ef func():
print(111)
yield 1
print(222)
yield 2
print(333)
yield 3
a = func()
next(a) # 111
b = next(a) # 222
print(b)
c = next(a) # 333
print(c)
大家可以清楚的看到yield关键字的作用,我们再来用它实现斐波那契数列:
# 生成菲波那切数列 0,1,1,2,3,5
# yield作用: 依次返回结果
def fib(end):
a,b = 0,1
for i in range(end):
a,b = b,a+b
yield b
x = fib(10)
for i in range(10):
b = next(x)
print(b)
本质: 闭包函数(嵌套函数+外层函数返回内层函数的函数体)
一样的我们来思考几个问题:
我们来自定义一个装饰器:
def func1(f): # 参数用来接收原函数的函数体
# f()
# def func2():
# print('我是装饰器')
# f()
# return func2
# @func1 # 利用装饰器 # 直接运行时 装饰器外层函数 会被调用
# def test(): # 原函数变成了装饰器内层函数的函数体 func2
# print('我是原函数!')
# 相当于执行了 test = func1(test)的操作
我们来看看内置装饰器:
#内置装饰器
# class Person:
# def __init__(self,name,):
# self.name = name
# self.age = age
#
# @property # 让方法可以像属性一样被调用(不用加括号)
# def play(self):
# print('我是play方法!')
# @classmethod # 自动把类传给参数接收
# def learn(cls):
# print('这是learn方法!')
# @staticmethod # 可以让这个方法不需要去传入self,cls这种必备参数
# def sleep(self):
# print('我是sleep方法!')
# def __call__(self):
# print('我是call方法!')
我们可以对装饰器做一个简单的总结:
我们来思考几个问题:
处理异常
第一点:尽量避免bug(考虑全面)
第二点:try–except
下面我给大家举个例子:
try: # 没报错 执行
a = b
except NameError as n: # try里面的代码出错时 运=行
print(f'错误信息为{n}')
b = 'null'
当我们不知道错误类型的时候可以写父类错误,如:
except Exception as e: # 未知错误 Exception是所有错误类型的父类
print(f'错误信息为{e}')
断言 assert
作用与if类似 可以用作判断
判断条件是否满足断言的条件时 满足时代码可以运行
否则代码终止
作用:可以用作限制等
异常查找
错在哪 什么错
这次的作业难度不大,我准备将上次的作业和这次的作业一起在下一篇文章讲解,大家端午节快乐!!!



