假设你有一个函数,有时会返回一个值,有时则不会,因为在这种情况下你真的没有什么东西可以返回,甚至没有默认值.现在你想对结果做些什么,但当然只有在有结果的时候.
例:
result = function_call(params)
if result:
print result
Run Code Online (Sandbox Code Playgroud)
有没有办法以更加pythonic的方式写这个,甚至可能在一行?
像那样:
print function_call(params) or #nothing
Run Code Online (Sandbox Code Playgroud)
(注意,我的意思是它不应该打印"没有"或"无".它实际上根本就不打印,如果结果是None)
没有; 在Python中,名称绑定是一个语句,因此不能用作语句中的表达式.既然print也是一个声明,你将需要3行; 在Python 3中你可以写:
result = function_call(params)
print(result) if result else None
Run Code Online (Sandbox Code Playgroud)
这对于理解或生成器中的名称绑定来说并不完全正确,其中名称绑定是具有类似语句的语义的语法项:
[print(result) for result in generator_call(params) if result]
Run Code Online (Sandbox Code Playgroud)
正如科斯所说,你可以滥用它来创造一个单元素的理解:
[print(result) for result in (function_call(params), ) if result]
Run Code Online (Sandbox Code Playgroud)
执行名称绑定并且可能同样被滥用的另一个语法项是lambda表达式:
(lambda result: print(result) if result else None)(function_call(params))
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种情况下,对返回值的操作必须是表达式而不是语句.