Python与C语言for循环执行差异:为何前者不运行后者无限循环?
Python与C语言for循环问题解答
1. 能否在Python中实现for循环的无限循环?
可以实现,核心是让for循环迭代一个无限迭代器,常见方式有两种:
- 使用
itertools.cycle()重复固定序列:
from itertools import cycle # 循环迭代[1],永远不会终止 for _ in cycle([1]): print("无限循环中...")
- 自定义无限生成器:
def infinite_gen(): while True: yield None # 生成无限个空值供循环迭代 for _ in infinite_gen(): print("无限循环中...")
2. 分析Python代码的print语句执行次数
给定代码:
for i in range(1,6,-1): print("done")
print语句执行次数为0。
原因:Python的range(start, stop, step)生成序列的规则是:
- 当
step为正数时,需start < stop才会生成递增序列; - 当
step为负数时,需start > stop才会生成递减序列。
这里start=1,stop=6,step=-1,1 < 6不满足递减序列的生成条件,range(1,6,-1)返回空序列,for循环无元素可迭代,因此不会进入循环体,print语句一次都不执行。
3. 为何Python代码无执行,而C语言代码却无限循环?
先看C语言代码:
int i; for (i=5; i<=10; i--) { printf("what happens"); }
两者for循环的本质差异:
- Python的for循环是迭代器驱动:它先一次性获取整个迭代对象(比如range生成的序列),如果迭代对象为空,循环直接终止,不会执行任何循环体操作。
- C语言的for循环是条件驱动:它的结构
for(初始化; 条件判断; 增量操作)中三个步骤独立执行:- 初始化
i=5; - 判断
i<=10,5<=10成立,进入循环体; - 执行
i--,i变为4; - 再次判断
4<=10,依然成立,继续循环;
后续i会不断减小(4→3→2→...→负无穷),永远满足i<=10的条件,因此进入无限循环。
- 初始化
内容的提问来源于stack exchange,提问作者Dr. D.N.D.Harini
相关产品推荐
相关产品推荐

