Python 列表压缩中作为集合的动态表达式是否只计算一次?

Python 列表压缩中作为集合的动态表达式是否只计算一次?,python,Python,列表压缩中作为集合的动态表达式是否只计算一次?例如: val_str = [str(val) for val in list(range(10))] 列表(范围(10))位只计算一次还是10次?简短回答:它只计算一次 现在让我们证明一下。我们将创建一个函数,其中包含一个print,并查看它的打印次数: def my_范围(停止): 打印(“我的范围被称为”) 返回范围(停止) val_str=[str(val)表示列表中的val(my_范围(10))] 输出只包含一行eargomy_rang

列表压缩中作为集合的动态表达式是否只计算一次?例如:

val_str = [str(val) for val in list(range(10))]

列表(范围(10))
位只计算一次还是10次?

简短回答:它只计算一次 现在让我们证明一下。我们将创建一个函数,其中包含一个
print
,并查看它的打印次数:

def my_范围(停止):
打印(“我的范围被称为”)
返回范围(停止)
val_str=[str(val)表示列表中的val(my_范围(10))]

输出只包含一行eargo
my_range
只调用一次。

如果循环被反复评估,它将如何停止?它应该只被评估一次。它基本上是创建列表,然后迭代列表中的项目,并在字符串化后将它们放入新列表中。@SkyWalker。这是一个完全无关的问题。仅仅因为循环恰好共享名称并不意味着它有很多共同点。Python的
for
更像是
foreach
。是的,表达式必须提供一个iterable。然后,在该iterable上调用迭代器协议,与for循环完全相同。对它进行多次评估是毫无意义的。顺便提一下,为什么要使用
列表(范围(10))
?只需使用
range(10)
,注意
for
循环也是如此。使用函数调用的结果运行
for
循环是很常见的。