3

Python 2.7を使用すると、次のコードがあります。

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

return None

変数は、result1つの値のみを返すsqlite3クエリから返されます。クエリが結果を返す場合は、データを解凍して返します。それ以外の場合は、Noneを返します。上記のコードは過度に冗長に見え、まったくpythonicではありません。もっと良い方法はありますか?

4

5 に答える 5

10

if else次の条件を使用できます。

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

またはこれを次のように単純化します。

return result[0] if result else None

空のタプルなど、result他のfalse-y値である可能性を気にしない場合。

于 2012-09-18T15:18:34.537 に答える
4

空でないタプルまたはNoneのいずれかのみを取得すると仮定すると、最も簡単な方法は次のとおりです。

return result and result[0]
于 2012-09-18T15:22:22.423 に答える
2

方法は次のとおりです。

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

これを行うためのよりコンパクトな方法もあります。

return (result or [None])[0]

しかし、最初のものはより明確です。

最後にセミコロン(Cコードではない)を使用しないでください。Pythonのドキュメントを読むと役立ちます。それはよく過ごした時間です。

于 2012-09-18T15:24:56.030 に答える
1

私は答えがなければ完全ではないと思いますtry/except

try:
   return result[0]
except TypeError,IndexError:
   return None
于 2012-09-18T15:27:16.410 に答える
0

あなたが残したものと、に置き換える必要が;あるという事実を除けば、私はあなたのコードに問題はありません。result != Noneresult is not None

これは単純で非常に理解しやすく、最近のリクエストのいずれかが2つ以上の要素を返しても、黙って失敗することはありません。これまでのすべてのソリューションのように、最初の要素を黙って返すのではなく、例外が発生します。

于 2012-09-18T15:41:22.233 に答える