この非効率的なスタイルを使用して、常に Python でコーディングしてきました
checkbox = self.request.get(u'checkbox') # get data from a web form
if checkbox == u'yes':
someclass.enabled = True
else:
someclass.enabled = False
これを短くするにはどうすればよいですか?
この非効率的なスタイルを使用して、常に Python でコーディングしてきました
checkbox = self.request.get(u'checkbox') # get data from a web form
if checkbox == u'yes':
someclass.enabled = True
else:
someclass.enabled = False
これを短くするにはどうすればよいですか?
someclass.enabled = self.request.get(u'checkbox') == u'yes'
if
ステートメントなしでこれを行うことができます:
someclass.enabled = (checkbox == u'yes')
ステートメントの結果に値を設定するだけです。
checkbox = self.request.get(u'checkbox') # get data from a web form
someclass.enabled = checkbox == u'yes'
checkbox == u'yes'
ブール値を返すので、この結果を変数に直接割り当てることができます。
someclass.enabled = (checkbox == u'yes')
おそらく、別の関数に分割できます。
def getCheckboxValue(name):
return (self.request.get(name) == u'yes')
ブール値が問題に固有のものであったため、または便利な例であったため、例でブール値を使用したかどうかは少し不明です。ブール値よりも複雑な型を変数に代入したい場合は、Python の三項演算子も確認してください (バージョン 2.5 以降を使用している場合)。
someclass.int_val = 1 if checkbox == u'yes' else 2
に変換されます
if checkbox == u'yes':
someclass.int_val = 1
else
someclass.int_val = 2
ブール変数については、Yuushi のソリューションを使用することをお勧めしますが、完全を期すために、これは次のようになります。
someclass.enabled = True if checkbox == u'yes' else False
タイピング量はほぼ同じですが、縦方向のスペースを節約できるので便利です。
Python はステートメントを評価し、出力をステートメントに返します。したがって、右側で割り当て変数を使用できます。
お気に入り
variable = eval_statment
あなたの例は
someclass.enabled = self.request.get(u'checkbox') == u'yes'
ブール値以上が必要な場合は、ディスパッチ パターンの使用を検討する必要があります。
targets = {
'yes': do_yes,
'no': do_no,
'maybe': do_maybe,
}
targets[self.request.get(u'tricheckbox')]()
# where do_yes, do_no, and do_maybe are the functions to call for each state.
別の回答で指摘されているように、値に基づいてさまざまなことを行うためにディスパッチ テーブルを使用できます。get()
ただし、直接ルックアップを実行するのではなく、辞書のメソッドを使用すると、何も一致しない場合も簡単に処理できます。マッピングは二度と使用されないため、一時的かつ匿名にすることができます。
このアプローチは非常に汎用的で、必要に応じて拡張できますが、通常は追加の関数を作成する必要があります。後者のため、あなたの例のような非常に単純なケースでは、他の答えの1つがおそらく最小限の労力で済みます。
def do_yes(): print 'do_yes'
def do_no(): print 'do_no'
def do_maybe(): print 'do_maybe'
def no_match(): print 'no_match'
{
u'yes': do_yes,
u'no': do_no,
u'maybe': do_maybe,
}.get(self.request.get(u'checkbox'), no_match) ()