如何在Python中实现类似C语言的带条件判断的for循环
实现C风格带自定义条件for循环的几种简洁方案
方案1:直接使用while循环(最推荐,无额外依赖,易读性最高)
这类非固定次数的循环不需要强行套用迭代器逻辑,用while循环写最直观,和原C语言逻辑完全对齐:
e = 0.1 val = 1 while 4 / val > e: # 这里放循环体逻辑,对应C语言for循环大括号内的代码 print(val) val += 2
方案2:生成器实现(适合需要复用该迭代逻辑的场景)
如果需要多次用到这个遍历逻辑,用生成器写比自定义迭代器类简洁很多,没有冗余的魔法方法声明:
def odd_iter(e): val = 1 while 4 / val > e: yield val val += 2 # 调用方式和普通for循环一致 for i in odd_iter(0.1): print(i)
方案3:基于itertools的极简写法
如果不想额外定义函数,可以用标准库itertools的工具组合实现,一行就能搞定迭代器定义:
from itertools import count, takewhile e = 0.1 # count(1, 2) 对应初始值val=1,步长+2;takewhile对应终止条件 for val in takewhile(lambda x: 4 / x > e, count(1, 2)): print(val)
注意点
你之前写的自定义迭代器存在逻辑偏差:__next__方法中先执行了self.val += 2再返回值,导致第一个输出的是3,和原C语言循环第一次用val=1执行的逻辑不等价,上面提供的三个方案都和原C逻辑完全对齐。
内容的提问来源于stack exchange,提问作者kari
相关产品推荐
相关产品推荐

