for/while循环语句中的变量是否仅在首次执行时求值?
Python循环语句的变量求值规则
核心规则
for循环:in关键字后的可迭代对象表达式,仅在循环首次启动前完成1次求值,生成迭代器后,后续每轮迭代都不会重新计算该表达式。哪怕循环体内修改了表达式引用的变量,也不会改变已经生成的迭代逻辑。while循环:while后的条件判断表达式,会在每一轮循环启动前重新求值,根据变量的最新值判断条件是否成立,再决定是否继续执行循环体。
示例代码运行说明
你提供的测试代码:
arr = [2, 3, 4] for i in range(len(arr)): arr.append(5)
实际运行逻辑和结果:
- 循环启动前优先计算
range(len(arr)),此时arr初始长度为3,最终生成固定遍历0、1、2三个值的range迭代器 - 循环总共执行3次,每次执行都会向
arr末尾追加元素5 - 循环会正常终止,不会出现无限循环,运行结束后
arr的值为[2, 3, 4, 5, 5, 5]
常见误区提醒:很多新手会误以为上述代码会无限追加5触发死循环,本质是混淆了for和while的求值逻辑。如果需要每轮都根据数组最新长度做判断,要使用while循环实现,例如
while len(arr) < 10: arr.append(5),这段代码每轮都会重新计算len(arr),直到数组长度到10才会停止,如果条件设置不合理很容易触发无限循环。
内容的提问来源于stack exchange,提问作者Wyatt
相关产品推荐
相关产品推荐

