使用单个元素解包元组,或者如果元组为None,则返回None

时间:2012-09-18 15:17:23

标签: python python-2.7

使用python 2.7,我有以下代码:

if result != None:
    (data,) = result
    return data

return None

从仅返回一个值的sqlite3查询返回result变量。如果查询返回结果,我想解压缩并返回数据,否则我想返回None。上面的代码似乎过于冗长而且根本不是pythonic。还有更好的方法吗?

5 个答案:

答案 0 :(得分:9)

您可以使用if else条件:

return result[0] if result is not None else None

或将其简化为:

return result[0] if result else None

如果您不关心result可能是其他false-y value,例如空元组等。

答案 1 :(得分:4)

假设您只获得非空元组或无,最简单的方法:

return result and result[0]

答案 2 :(得分:2)

一种方式可能是:

if result is not None:
    return result[0]
return None

还有一种更紧凑的方法:

return (result or [None])[0]

但第一个更清楚。

避免在结尾使用分号(不是C代码),阅读python文档可以帮助您。这是一个很好的时间。

答案 3 :(得分:1)

我认为没有try/except没有答案是完整的:

try:
   return result[0]
except TypeError,IndexError:
   return None

答案 4 :(得分:0)

除了您离开的;以及result != None应由result is not None替换之外,我的代码没有任何问题。

这很简单,非常容易理解,如果有一天你的请求返回2个或更多元素,它就不会默默地失败你:它会引发一个异常而不是静默地返回第一个元素,就像目前为止的所有解决方案一样。 / p>