在lambda中使用print

Gur*_*rio 3 python python-2.7

我想在lambda中使用print.像这样的东西:

lambda x: print x
Run Code Online (Sandbox Code Playgroud)

我明白,在Python 2.7中打印不是一个功能.所以,基本上,我的问题是:在Python 2.7中使用print作为函数是否有一种漂亮的方法?

the*_*eye 10

您可以导入print_function__future__,并用它作为这样的功能

from __future__ import print_function
map(print, [1, 2, 3])
# 1
# 2
# 3
Run Code Online (Sandbox Code Playgroud)


Tay*_*ton 7

问题是关于Python 2的,但是我最终还是从Google那里尝试使用Python 3的lambda内的print函数。

如果您只想查看有效的代码而不是我到达那里的方式,请跳至底部的最后一个代码示例。我想清楚地记录一下对于学习目的无效的内容。

所需结果

假设您要定义一个lambda print_list来打印列表中的每个项目,并且之间要用换行符。

lst = [1, 2, 3]

print_list = lambda lst: ...
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

1
2
3
Run Code Online (Sandbox Code Playgroud)

并且不应有未使用的返回值。

尝试1-地图未评估Python 3中的打印功能

首先,这里是行不通的Python 3井:

map(print, lst)
Run Code Online (Sandbox Code Playgroud)

但是,输出在某种程度上与直觉相反,并不是打印出来的行,因为Python 3中的map调用返回一个迭代器,而不是求值列表。

输出:

n/a
Run Code Online (Sandbox Code Playgroud)

返回值:

<map at 0x111b3a6a0>
Run Code Online (Sandbox Code Playgroud)

尝试2-评估地图迭代器

您可以通过将map结果传递到来实现打印list(...),这将产生理想的输出,但是具有返回空列表(在REPL中评估)的副作用。

list(map(print, lst))
Run Code Online (Sandbox Code Playgroud)

输出:

1
2
3
Run Code Online (Sandbox Code Playgroud)

返回值:

[None, None, None]
Run Code Online (Sandbox Code Playgroud)

您可以使用下划线一次性变量约定来解决此问题:

_ = list(map(print, lst))
Run Code Online (Sandbox Code Playgroud)

一种类似的方法是在列表推导中调用print:

[print(i) for i in lst]
Run Code Online (Sandbox Code Playgroud)

我不喜欢这些方法,因为它们仍然产生未使用的返回值。

尝试3-将解包运算符应用于地图迭代器

像这样:

[*map(print, [1, 2, 3])]
Run Code Online (Sandbox Code Playgroud)

(这仍然返回不理想的空值列表。)

在上面的注释中,@ thefourtheye建议使用单行循环:

for item in [1, 2, 3]: print(item)
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作,并且避免了副作用。尝试将其放入lambda会引发SyntaxError。我尝试将其包装在括号内,但没有成功;尽管可能有实现此目的的方法,但我还没有弄清楚。

(解决方案!)尝试4-在打印呼叫中应用拆箱操作员

我得到的答案是使用分隔符arg爆炸打印调用中的列表:

print(*lst, sep='\n')
Run Code Online (Sandbox Code Playgroud)

输出:

1
2
3
Run Code Online (Sandbox Code Playgroud)

这将产生预期的结果而没有返回值。

最后,让我们将其包装在lambda中以根据需要使用:

print_list = lambda lst: print(*lst, sep='\n')
print_list([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

对于我在Python 3中的用例来说,这是最好的解决方案。

相关问题