python第9天
生成器
'''
# 生成器其本质为迭代器
# 关键字:yield
# 只要函数中加入yield就会变成生成器
# yield会暂停和返回值
# 序列类型,符串、列表、元组
# 是否可迭代,可以for循环输出试试,报错即不是
# 可迭代对象相较于普通对象多了一个__iter__的魔法方法
# 迭代器相较于可迭代对象多了一个__next__的魔法方法
# 赋值实质为对应类的实例化对象
# dir(对象即变量),展示其可使用的函数
'''
a = 5
b = [1,3,6,10,14]
c = iter(b)
next(c)
next(c)
next(c)
next(c)
next(c)
def func():
print(1)
yield 2
print(3)
yield 4
print(5)
yield 6
print(7)
a = func()
next(a)
next(a)
next(a)
next(a)
'''
var = 1
var = var + 1
### 注意以下两种方式赋值的区别
### 赋值的三步流程
# 第一步:获取var的值
# 第二步:让var加1
# 第三步:把运算的结果赋值给var
# 交换值时,先交换,后复制,没有刷新内存
'''
a = 1;b = 2;a = b
b = a+b
a
b
a = 1
b = 2
a,b = b,a+b
a
b
def hh():
print("哈哈哈")
a = hh
a()
装饰器
'''
装饰器:
作用:不修改对方代码的前提下,进行二次修改
结构:闭包
实质:嵌套函数
特点:
1、外层函数返回内层函数的函数名
2、装饰器必须在被装饰函数上方
3、把被装饰函数作为参数传给@符号后面的装饰器函数
执行本质:
1、把被装饰函数作为参数传给@符号后面的装饰器函数
2、执行装饰器函数,并返回一个包装了原函数的函数;同时,改变原函数hh的指向,现在原函数指向了包装函数,**包装函数的实质是装饰器函数的内部函数**
3、执行原函数其实是执行了包装后的函数
4、如果还想实现原函数功能,就加回调
'''
def hh():
print("测试中test测试中".center(60,"#"))
def checkhh():
print("这是checkhh函数的调用")
def check():
print("正在检查权限")
return check
test = checkhh()
test
test()
def hh():
print("测试中test测试中".center(60,"#"))
def checkhh(func):
print("这是checkhh函数的调用")
def check():
print("正在检查权限")
func()
return check
test = checkhh(hh)
test
test()
def checkhh(func):
print("这是checkhh函数的调用")
def check():
print("正在检查权限")
func()
return check
@checkhh
def hh():
print("测试中test测试中".center(60,"#"))
hh
hh()
def checkhh(func):
print("这是checkhh函数的调用")
def check(*args,**kwargs):
print("正在检查权限")
return func(*args,**kwargs)
return check
@checkhh
def adpr(a,b):
return a+b
adpr(2,3)
异常
try:
a = int(input("请输入数字:"))
except:
print("这里出现错误了")
else:
print("输入正确")
finally:
print("程序结束了")
try:
a = int(input("请输入数字:"))
except Exception as e:
print("错误信息:",e)
else:
print("输入正确")
finally:
print("程序结束了")
'''
# assert 1==2 #和if类型,但不同的是如果为假,会报错,主要用于测试
# 判断为False的情况:False,None,"",'',0,空数据类型[],{},(),set()
'''
![在这里插入图片描述](https://img-blog.csdnimg.cn/41087640771f4c0fa86036fce72ca8ce.png)