Python-打印并返回for循环
我刚刚开始学习Python。我从作者用来解释短路的代码中看到了一个有趣的代码。代码如下:Python-打印并返回for循环,python,for-loop,return,list-comprehension,Python,For Loop,Return,List Comprehension,我刚刚开始学习Python。我从作者用来解释短路的代码中看到了一个有趣的代码。代码如下: >>> def fun(i): ... print "executed" ... return i ... 我试着称之为乐趣(1)。输出如下,对我来说非常有意义 >>> fun(1) executed 1 然后我尝试了[0,1,2,3][fun(I)for I in[0,1,2,3]],结果如下: >>> [fu
>>> def fun(i):
... print "executed"
... return i
...
我试着称之为乐趣(1)。输出如下,对我来说非常有意义
>>> fun(1)
executed
1
然后我尝试了[0,1,2,3][fun(I)for I in[0,1,2,3]],结果如下:
>>> [fun(i) for i in [0, 1, 2, 3]]
executed
executed
executed
executed
[0, 1, 2, 3]
executed
0
executed
1
executed
2
executed
3
我期待着这样的事情:
>>> [fun(i) for i in [0, 1, 2, 3]]
executed
executed
executed
executed
[0, 1, 2, 3]
executed
0
executed
1
executed
2
executed
3
谁能告诉我我做错了什么?谢谢大家! 试试看
l = [fun(i) for i in [0, 1, 2, 3]]
这将输出
已执行已执行
已执行
执行 然后只需执行
l
,这将显示l
的值,也就是说:[0,1,2,3]
所以当你执行的时候
>>> [fun(i) for i in [0, 1, 2, 3]]
这将调用fun(0)、fun(1)等,并显示执行的,然后显示计算值:[0,1,2,3]
尝试执行
l = [fun(i) for i in [0, 1, 2, 3]]
这将输出
已执行
已执行
已执行
执行
然后只需执行l
,这将显示l
的值,也就是说:[0,1,2,3]
所以当你执行的时候
>>> [fun(i) for i in [0, 1, 2, 3]]
这将调用fun(0)、fun(1)等,并显示执行的,然后显示计算值:[0,1,2,3]
尝试以下操作:
def fun(i):
print("executed\n", i)
for i in range(4)
fun(i)
试试这个:
def fun(i):
print("executed\n", i)
for i in range(4)
fun(i)
在此上下文中,方形括号形成一个新列表,每个元素都是[0,1,2,3]中相应元素的函数。它被称为列表
. 打印“已执行”是因为在新列表函数的形成过程中调用了fun(对于[0,1,2,3]中的每个元素)。不会打印数字0、1、2和3,因为不会打印fun的返回值,而是将其放入新列表中。
要查看新列表,请执行以下操作:
print("new list:",[fun(i) for i in [0, 1, 2, 3]])
在此上下文中,方形括号形成一个新列表,每个元素都是[0,1,2,3]中相应元素的函数。它被称为列表
. 打印“已执行”是因为在新列表函数的形成过程中调用了fun(对于[0,1,2,3]中的每个元素)。不会打印数字0、1、2和3,因为不会打印fun的返回值,而是将其放入新列表中。
要查看新列表,请执行以下操作:
print("new list:",[fun(i) for i in [0, 1, 2, 3]])
这不是短路的例子。这是一个有副作用的函数——它会写入标准输出,除了返回一个值之外,这也是一个可观察的效果
[fun(i) for i in [0, 1, 2, 3]]
这是列表
理解。一般来说,您应该有充分的理由在这种情况下使用具有副作用的函数,下面解释理解列表的动机:
>>> def fun(i):
... print "executed"
... return i
...
列表理解提供了在中创建列表的更简洁的方法
使用map()
和filter()
和/或嵌套循环的情况
目前正在使用
因此,阅读您的代码的人可能会认为它只需要创建列表,而不需要在此操作期间打印元素
这不是短路的例子。这是一个有副作用的函数——它会写入标准输出,除了返回一个值之外,这也是一个可观察的效果
[fun(i) for i in [0, 1, 2, 3]]
这是列表
理解。一般来说,您应该有充分的理由在这种情况下使用具有副作用的函数,下面解释理解列表的动机:
>>> def fun(i):
... print "executed"
... return i
...
列表理解提供了在中创建列表的更简洁的方法
使用map()
和filter()
和/或嵌套循环的情况
目前正在使用
因此,阅读您的代码的人可能会认为它只需要创建列表,而不需要在此操作期间打印元素。[0,1,2,3]
是列表理解的结果,[..for..in..]
完成后输出。在创建该列表的过程中,首先执行了一组print
语句。FWIW,所有这些都与短路无关。您可以从和课程材料中了解有关此主题的更多信息。短路是使用布尔结果来避免进一步执行(如果你已经有了一个真实的结果,就不需要在或调用上执行更多)。我不知道你期望什么,但我猜你错过了某个地方对any
的调用。我建议重新阅读关于另一个问题的解释:)FWIW,你不应该在这个时代学习Python 2,它已经死了十年了。学习Python 3。[0,1,2,3]
是列表理解的结果,[..for..in..]
,完成后输出。在创建该列表的过程中,首先执行了一组print
语句。FWIW,所有这些都与短路无关。您可以从和课程材料中了解有关此主题的更多信息。短路是使用布尔结果来避免进一步执行(如果你已经有了一个真实的结果,就不需要在或调用上执行更多)。我不知道你期望什么,但我猜你错过了某个地方对any
的调用。我建议重新阅读关于另一个问题的解释:)FWIW,你不应该在这个时代学习Python 2,它已经死了十年了。了解Python 3。如果您还没有了解“range()”函数的作用,它将简单地循环0到3之间的数字序列。如果您还没有了解“range()”函数的作用,它将简单地循环0到3之间的数字序列。