2009-07-30 6 views
7

私は(それが関連性の場合、Djangoのために開発)たくさん次のように入力し、自分自身を見つけることだ:変数チェックと代入のPythonショートカットはありますか?

if 'query' in request.POST.keys() then: 
    myVariable = request.POST['query'] 
else: 
    # something else, probably looking at other keys 

(つまり、パラメータのリストを構築)より一般的です

また
if testVariable then: 
    myVariable = testVariable 
else: 
    # something else 

、および私はちょうどこれを簡略化することについて知らないショートカットがありますか?論理の種類と何かmyVariable = assign_if_exists(testVariable)

答えて

25

、あなたが「存在しない」場合には、その前の値にそのままmyVariable変数のままにしたいとの最初のケースと

myVariable = testVariable or myVariable 

取引、および

myVariable = request.POST.get('query', myVariable) 

取引を想定すると、二つ目。しかし、これはPythonの概念ではありません。最初のものはtrueまたはfalse、もう1つはコレクション内のキーの有無です。

+0

最初のイディオムは本当にいいです。先日これについて知っただけです。 – jkp

+0

ありがとう、完璧です。私はこの構文的な砂糖をこれまで見逃していたのかなと思いました。 –

7

最初のインスタンスが奇妙に記述されています...なぜブール値を別のブール値に設定するのですか?

あなたが意味することは、testVariableが長さゼロの文字列でないかNoneでないか、またはFalseに評価される何かがない場合に、myVariableをtestVariableに設定することです。

その場合は辞書にインデックスを付けるとき、私は単にgetを使用し、より明示的製剤

myVariable = testVariable if bool(testVariable) else somethingElse 

myVariable = testVariable if testVariable is not None else somethingElse 

を好みます。

myVariable = request.POST.get('query',"No Query") 
関連する問題