3/06课后总结
异常捕获补充
try:
print(ekaskl) # 不会执行
except Exception as e:
print(e) #name 'ekaskl' is not defined
else:
print('没得问题') # else中的代码只会在代码没有问题下才会运行
finally:
print('反正都行') # 不管包不报错都会运行
try:
print(1) # 正常执行
except Exception as e:
print(e) # 没有错误不运行
else:
print('没得问题') # 不报错,执行
finally:
print('反正都行') # 正常执行
for循环原理补充
l = [1, 2, 3, 4, 5]
# for i in l:
# print(i)
res = iter(l)
while True:
try:
print(next(res))
except Exception:
break
"""
注释掉的for循环的底层逻辑就是while循环
"""
生成器对象
# range()就是一个典型的生成器,生成器的作用就是节省空间
# 生成器一定是迭代器,迭代器不一定是生成器
def index():
print(1)
yield 1111
print(2)
print(3)
yield 2222
print(4)
print(5)
yield 3333
print(6)
res = index() # 从此时起就变成了生成器
ret = res.__next__() # 1 遇到了yield就挺住了
print(ret) # 1111 将yield直接返回
ret = res.__next__() # 2 3 继续执行代码,知道遇到下个yield
print(ret) # 2222 继续返回yield
ret = res.__next__() # 4 5
print(ret) # 3333
"""
函数中存在yield,在调用前是普通函数,调用后就变成了生成器(迭代器)
"""
生成器的案例:实现range方法
def my_reang(x, y=None, z=1):
if not y:
y = x
x = 0
while x < y:
yield x
x += z
while x > y:
yield x
x -= z
for i in my_reang(2, 20, 1):
print(i)
yield传值(了解)
def eat():
print('开始干饭')
while True:
food = yield
print('吃%s' % food)
res = eat() # 把函数变成生成器
print(res.__next__()) # 遇到yield立马停止
res.send('锅巴') # send方法,先调用__next__再传参
res.send('锅巴1')
res.send('锅巴2')
yield与return的对比
yield:
1. 可以有返回值
2. 把函数停住,不结束
3. 把函数变成生成器,支持__next__取值
return:
1. 可以有返回值
2. 结束函数的运行
生成器表达式
def add(n, i):
return n + i
def test():
for i in range(4):
yield i
g = test()
for n in [1, 10, 11]:
g = (add(n, i) for i in g)
"""
第一次循环:
g = (add(1, i) for i in g)
第二次循环:
g = (add(n, i) for i in (add(n, i) for i in g))
"""
res = list(g)
print(res)
# A. res=[10,11,12,13]
# B. res=[11,12,13,14]
# C. res=[20,21,22,23]
# D. res=[21,22,23,24]
常见内置函数
l = [1, 2, 3, 0]
abs(-1) # 绝对值
all(l) # 有一个假就为假
any(l) # 有一个真就为真
myslice = slice(5) # 设置截取5个元素的切片
divmod(100, 10) # 取模(100被除数,10除数) (10商,0余数)
eval() # 识别简单的python代码
exec() # 识别python代码,但是要符合规范
isinstance('123', int) # 判断类型
chr(65) # 转成字符
ord('A') # 转成数字
sum() # 求和
pow() # 次方
res=bytes(s, 'utf-8') # 转成二进制编码
callable(index) # 查看是否可调用
round(3.4) # 四舍五入
locals() # 返回当前位置全部的局部变量
标签:总结,__,06,res,生成器,yield,next,课后,print
From: https://www.cnblogs.com/juzixiong/p/17184664.html