-
我写了个用 yield return 返回过滤结果的 C# 方法、在方法开头加了参数为空就抛异常的校验,调用处也老老实实包了 try-catch,结果传 null 进去那个异常死活没被 catch 住一路飞到最外层,盯着代码看半天才反应过来整个方法体压根没在调用那一刻执行的深度复盘
我写了个 C# 方法,接收一个集合和阈值、用 yield return 逐个吐出大于阈值的元素,很注意防御地在方法第一行就校验:集合为 null 就抛 ArgumentNullException,调用方也规规矩矩把调用包在 try-catch 里准备优雅降级。可上线后一个 null 传进来程序直接崩了:异常确实抛了,却没被那个明明包着调用的 try-catch 接住,而是穿过它一路冒泡到最顶层。我…- 0
- 0
-
一个生成器我先遍历了一遍算总数、再遍历一遍做处理,结果第二遍啥也没有、处理了零条数据:一次 Python 迭代器只能消费一次、把一次性的流当成可反复遍历的列表的深度复盘
我写脚本批量处理数据,逻辑很直白——先遍历一遍算出总共多少条打印进度,再遍历一遍真正处理每一条。本地测着没问题,上线处理大数据日志却显示共 0 条待处理、一条都没处理。打印那个变量才看清:它不是 list,而是个生成器(迭代器);迭代器只能消费一次,第一遍 sum 算总数时就把它的游标走到了尽头、消费光了,第二遍遍历时它已经空了。这篇复盘从故障现场讲到迭代器为什么只能消费一次、它和列表的本质区别(…- 0
- 0
-
我的 Python 函数返回的数据,第一次遍历好好的、第二次却空空如也,我对着生成器只能消费一次这个坑排查了大半天的复盘
写了个数据处理脚本,一个函数返回一批记录,调用方先遍历一遍统计总数打进度、再遍历一遍写数据库,逻辑顺得不能再顺。结果诡异:日志清清楚楚"共 5000 条",数据库里却一条都没写进去。盯着代码反复看,两次遍历代码一模一样,凭什么第一次数出 5000、第二次一条没有?甚至怀疑数据库连接,查半天没问题。排查大半天才撞上 Python 对新手极隐蔽的坑:生成器只能被消费一次。根因是函数…- 0
- 0
-
Python 生成器从入门到精通:yield、迭代器协议与惰性求值
很多人写了几年 Python,对 yield 的认识还停留在"它能让函数返回多个值"。这个理解不算错,但太浅,浅到没法解释这些问题:为什么 yield 的函数调用后不执行?为什么生成器只能遍历一次?生成器和迭代器到底什么关系?yield from 又是什么?这篇文章把生成器、迭代器协议、惰性求值这三件事一次讲透,并给出能直接用在生产代码里的模式。 从迭代器协议说起 要理解生成器…- 0
- 0
yield
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!




