Python 使用单个元素解压元组,如果元组为None,则返回None
使用python 2.7,我有以下代码:Python 使用单个元素解压元组,如果元组为None,则返回None,python,python-2.7,Python,Python 2.7,使用python 2.7,我有以下代码: if result != None: (data,) = result return data return None result变量是从只返回一个值的sqlite3查询返回的。如果查询返回结果,我希望解包并返回数据,否则我不希望返回任何结果。上面的代码似乎过于冗长,一点也不像python。有更好的方法吗?如果其他条件: return result[0] if result is not None else None 或者将其简化
if result != None:
(data,) = result
return data
return None
result
变量是从只返回一个值的sqlite3查询返回的。如果查询返回结果,我希望解包并返回数据,否则我不希望返回任何结果。上面的代码似乎过于冗长,一点也不像python。有更好的方法吗?如果其他
条件:
return result[0] if result is not None else None
或者将其简化为:
return result[0] if result else None
如果您不关心
结果
可能是其他的,例如空元组等。假设您只能得到非空元组或无元组,最简单的方法是:
return result and result[0]
一种方法可以是:
if result is not None:
return result[0]
return None
还有一种更简洁的方法:
return (result or [None])[0]
但第一点更为明确
请避免在结尾使用分号(不是C代码),阅读python文档有助于您。这是一段很好的时间。我想没有
尝试/除了,答案是不完整的:
try:
return result[0]
except TypeError,IndexError:
return None
除了你离开的代码>和结果!=无
应替换为结果不是无
,我对您的代码没有任何问题
它很简单,很容易理解,如果有一天您的请求返回2个或更多元素,它不会悄悄地让您失败:它会引发异常,而不是像目前为止的所有解决方案一样悄悄地返回第一个元素。您可以摆脱这些无用的代码>也不是pythonic:-)部分“非pythonic性”是行末的分号…我是一个生活在C/C世界的芭比女孩。分号被删除了,哈哈。如果result-else-None,我只会写result[0],在上下文中应该是一样的。我会使用这个(+1),但可能值得注意的是,如果元组有超过1个元素,OP的代码将失败,而这将愉快地通过。哈,我不知道你可以通过索引引用元组值。我猜这就是我的python noobness秀。谢谢result
不仅在None
的情况下,而且在其为空列表或元组的情况下,计算结果为False
。如果结果是None-other-result[0]
@ovgolovin,我会坚持使用返回None——但这将为空序列引发索引器。我认为返回None
是可以接受的(甚至可能是可取的),尽管OP并没有真正说过。我想你们指的是最短的路——不一定是最简单的。