Eli*_*ICA 3 python list-comprehension python-2.7
所以我试图推出一个我在这个网站上真正第一次听到的技巧.
[i for i in range(0, 10) if True or print(i)]
Run Code Online (Sandbox Code Playgroud)
这个想法是你可以在listcomp的每一步调用一个任意函数,方法是将它放在一个总是返回True的"if"语句中.但该代码给出了语法错误.
如果我包装我想要这样调用的函数,但是:
def f(i):
print i
[i for i in range(0, 10) if True or f(i)]
Run Code Online (Sandbox Code Playgroud)
它产生所需的输出.所以我想知道,在Python的脑海中,两者之间有什么不同,因为我不知道它可能是什么 - 两个函数都返回"None",对吧?
您不能将语句(如printPython 2中)与列表推导混合使用.
但是,您可以print()通过添加以下内容来创建功能:
from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)
在您的文件的顶部.这变成print()了整个模块的功能.
但是,您正在使用该语句True or something,并且永远不会评估'某事',因为Python布尔表达式会短路.你想转过来:
if print(something) or True
Run Code Online (Sandbox Code Playgroud)
or如果左侧已经评估过True,那么评估表达式的右侧是没有意义的; 没有任何一方可以想出的任何东西都会使整个表达False永远.
你真的想在列表理解中避免这种副作用.使用适当的循环并将这些惊喜从代码中删除,使用if something or True真的是一种混乱,会混淆代码的未来维护者(包括你).
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |