Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用单个元素解压元组,如果元组为None,则返回None_Python_Python 2.7 - Fatal编程技术网

Python 使用单个元素解压元组,如果元组为None,则返回None

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 或者将其简化

使用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
或者将其简化为:

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并没有真正说过。我想你们指的是最短的路——不一定是最简单的。