3月06日课后总结

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()  # 返回当前位置全部的局部变量
posted @   橘子熊何妨  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示