是否range()不会每次都评估其参数? [英] Does range() not evaluate its argument every time?

查看:56
本文介绍了是否range()不会每次都评估其参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

l作为参数传递给range函数,该函数的值在for循环内进行了修改,但是该循环执行了10次而不是5.

l is passed as an argument to range function whose value is modified inside for loop, but the loop is going for 10 times instead of 5.

i = 0
l = 10
for i in range(l):
    print i,l
    l = l-1

输出为

0 10
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1

虽然我期望

0 10
1 9
2 8
3 7
4 6

range()是仅第一次评估值还是其他原因?

Does range() evaluates value for the first time only or something else is the reason?

推荐答案

不,for循环仅对可迭代表达式求值一次.

No, the for loop evaluates the iterable expression just once.

range()被称为一次,然后for循环遍历结果.

range() is called once, and the for loop then iterates over the result.

for声明文档中引用 :

Quoting from the for statement documentation:

表达式列表被评估一次;它应该产生一个可迭代的对象.

The expression list is evaluated once; it should yield an iterable object.

强调我.

这篇关于是否range()不会每次都评估其参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆