当前位置: 首页 > 面试题库 >

是否range()不会每次都评估其参数?

史修明
2023-03-14
问题内容

l作为参数传递给range函数,该函数的值在for循环内部被修改,但循环执行的10时间是而不是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()为只在第一次评估值或别的东西,是什么原因?


问题答案:

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

range()被调用 一次for然后循环遍历结果。

引用for声明文档中的内容:

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

强调我的。



 类似资料:
  • 问题内容: 以下内容在Python 3.6中从不打印任何内容 相反,它只是坐在那里烧坏了CPU。问题似乎在于,如果迭代器位于无限空间内,则永远不会返回迭代器,因为它首先评估完整的迭代器。鉴于假设应该是发电机,这令人惊讶。 我本来希望这会开始计数(到无穷大),就像这个生成器的行为(直接从docs取得): 但是,尽管我的生成器立即开始计数,但使用的生成器根本不计数。 其他工具可以达到我的期望。例如,以

  • 问题内容: 例如,如果我有以下语句: 如果foo1为true,python将检查foo2的条件吗? 问题答案: 是的,Python懒惰地评估布尔条件。 该文件说, 表达式x和y首先计算x;如果x为假,则返回其值;否则,将评估y并返回结果值。 表达式x或y首先计算x; 如果x为true,则返回其值;否则,将评估y并返回结果值。

  • 问题内容: 我希望使用Python函数来帮助我进行计算,但是如果击中a时不立即求值,则该过程可能会花费更长的时间。我认为这可能是经过短路评估的,但我只是想确定一下。另外,有没有一种方法可以在Python中说明如何评估函数? 问题答案: 是的,它会短路: 从文档: 如果iterable的所有元素都为true(或者iterable为空),则返回True。相当于: 因此,当它为False时,该函数立即中

  • 我需要生成加密安全、随机和唯一的字符串,每个字符串实际上都将用作访问令牌。为此,我计划使用Java的类。但是,我不确定SecureRandom是否保证唯一性。换句话说,SecureRandom在生成的每一次都会产生不同的值吗? 用值(即)创建实例似乎可以工作。但是,我不确定。此外,这个答案指出种子既不安全也不可移植。种子值符合我的目的吗? 如果你有其他建议,我也想听听。

  • 问题内容: 我的问题很简单。 循环是否评估它每次使用的参数? 如: python是否为该循环的每次迭代创建300个项目的列表? 如果是这样,这是避免这种情况的方法吗? 这样的代码示例也是如此。 是每一次应用反向过程,还是在每次迭代中计算长度?(我同时要求python2和python3) 如果不是,Python在迭代时如何评估可迭代的更改? 问题答案: 不用担心,迭代器只会被评估一次。它最终大致等同

  • 我有一个使用SpringLDAP 1.3.1的应用程序。它在启动时在Spring上下文中创建LdapTemplate,并将其传递给我的应用程序。我连接的LDAP字符串实际上是一个VIP设备,后面有多个Active Directory服务器。 该应用程序用于创建组层次结构,并分几个步骤进行。首先,它创建任何新组,然后删除任何删除的组,然后更新和更改组,最后更新任何新组或移动组的父级。 在最后一步中,

  • 问题内容: 我知道Java在这种情况下具有智能/惰性评估: 但是关于: 即使返回true 也被调用? 问题答案: 在Java(和其他类似C的语言)中,这称为 短路评估 。* 是的,在第二个示例中总是被调用。也就是说,除非编译器/ JVM可以确定它没有可观察到的副作用,否则在这种情况下它可以选择进行优化,但是无论如何您都不会注意到它们之间的差异。 两者截然不同; 前者本质上是一种优化技术,而第二种则

  • 我想在每个n批次之后输出它,而不是在每个纪元打印评估损失。 我每个时代大约有15万批。我想每50000批输出一次评估损失。 这可能吗?我正在使用pytorch和huggingface的预训练bert模型。 我的列车循环: