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",对吧?
您不能将语句(如print
Python 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 次 |
最近记录: |