微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python - 在 for 循环中打印和返回

如何解决Python - 在 for 循环中打印和返回

我刚刚开始学习 Python。我在 here 中看到了一段有趣的代码,作者用它来解释短路。代码如下:

>>> def fun(i):
...     print "executed"
...     return i
... 

我尝试调用 fun(1)。输出如下,对我来说很有意义。

>>> fun(1)
executed
1

然后我尝试了 [fun(i) for i in [0,1,2,3]]输出如下所示:

>>> [fun(i) for i in [0,3]]
executed
executed
executed
executed
[0,3]

我期待这样的事情:

executed
0
executed
1
executed
2
executed
3

谁能告诉我我做错了什么?谢谢!

解决方法

>>> def fun(i):
...     print "executed"
...     return i
... 

这不是短路的例子。这是有副作用的函数 - 它确实写入标准输出,除了返回值之外,这是可观察到的效果。

[fun(i) for i in [0,1,2,3]]

这是list理解。一般来说,你应该有充分的理由在这种地方使用有副作用的函数,PEP 202 解释了 list 理解的动机如下:

列表推导式提供了一种更简洁的方式来创建列表 map()filter() 和/或嵌套循环的情况 目前正在使用。

因此,阅读您的代码的人可能会认为它必须只是创建列表,而在此操作期间无需打印元素。

,

在这种情况下,方形刹车形成一个新列表,其中每个元素都是 [0,3] 中相应元素的函数 fun。它被称为列表 list-comprehensions。打印“已执行”是因为在新列表函数fun 的形成过程中被调用(对于[0,3] 中的每个元素)。数字 0,2 和 3 没有打印,因为 fun 的返回值没有打印,而是放在新列表中。 查看新列表:

print("new list:",[fun(i) for i in [0,3]])
,

尝试做

l = [fun(i) for i in [0,3]]

这将输出

已执行
执行
执行
执行

然后只要执行l,就会显示l的值,即:[0,3]

所以当你执行时

>>> [fun(i) for i in [0,3]]

这会调用 fun(0)、fun(1) 等,并显示 executed,然后显示计算值:[0,3]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?