假设您有一个函数,它有时会返回一个值,有时不会,因为在这种情况下您真的没有什么可以返回的,甚至连默认值之类的东西都没有。现在您想对结果做些什么,但当然只有有一个结果。
例子:
result = function_call(params)
if result:
print result
有没有办法以更 pythonic 的方式编写它,甚至可以在一行中编写?
像那样:
print function_call(params) or #nothing
(请注意,我的意思是它不应该打印“无”或“无”。如果结果为 None,它实际上应该完全不打印)
请您参考如下方法:
没有;在 Python 中,名称绑定(bind)是一个语句,因此不能用作语句中的表达式。由于 print 也是一条语句,因此您需要 3 行;在 Python 3 中你可以这样写:
result = function_call(params)
print(result) if result else None
对于推导式或生成器中的名称绑定(bind)而言,情况并非如此,其中名称绑定(bind)是具有类似语句语义的语法项:
[print(result) for result in generator_call(params) if result]
正如 Kos 所说,您可以滥用它来创建单元素理解:
[print(result) for result in (function_call(params), ) if result]
另一个执行名称绑定(bind)并可能被类似滥用的语法项是 lambda 表达式:
(lambda result: print(result) if result else None)(function_call(params))
请注意,在这两种情况下,对返回值的操作都必须是表达式而不是语句。
