在python列表理解中调用print

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",对吧?

Mar*_*ers 6

您不能将语句(如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真的是一种混乱,会混淆代码的未来维护者(包括你).


Pet*_*per 5

在Python 2.x中,print不是一个函数.它成为Python 3中的一个功能.