1

この非効率的なスタイルを使用して、常に Python でコーディングしてきました

    checkbox = self.request.get(u'checkbox') # get data from a web form
    if checkbox == u'yes':
        someclass.enabled = True
    else:
        someclass.enabled = False

これを短くするにはどうすればよいですか?

4

9 に答える 9

10
someclass.enabled = self.request.get(u'checkbox') == u'yes'
于 2012-09-04T01:40:12.510 に答える
4

ifステートメントなしでこれを行うことができます:

someclass.enabled = (checkbox == u'yes')

于 2012-09-04T01:40:56.597 に答える
2

ステートメントの結果に値を設定するだけです。

checkbox = self.request.get(u'checkbox') # get data from a web form
someclass.enabled = checkbox == u'yes'
于 2012-09-04T01:41:02.010 に答える
2

checkbox == u'yes'ブール値を返すので、この結果を変数に直接割り当てることができます。

someclass.enabled = (checkbox == u'yes')
于 2012-09-04T01:42:22.550 に答える
1

おそらく、別の関数に分割できます。

def getCheckboxValue(name):
    return (self.request.get(name) == u'yes')
于 2012-09-04T01:40:43.560 に答える
1

ブール値が問題に固有のものであったため、または便利な例であったため、例でブール値を使用したかどうかは少し不明です。ブール値よりも複雑な型を変数に代入したい場合は、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

タイピング量はほぼ同じですが、縦方向のスペースを節約できるので便利です。

于 2012-09-04T05:21:05.730 に答える
1

Python はステートメントを評価し、出力をステートメントに返します。したがって、右側で割り当て変数を使用できます。

お気に入り

variable = eval_statment

あなたの例は

someclass.enabled = self.request.get(u'checkbox') == u'yes'
于 2012-09-04T02:57:19.583 に答える
0

ブール値以上が必要な場合は、ディスパッチ パターンの使用を検討する必要があります。

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.
于 2012-09-04T03:25:54.543 に答える
-1

別の回答で指摘されているように、値に基づいてさまざまなことを行うためにディスパッチ テーブルを使用できます。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) ()
于 2012-09-04T08:26:21.590 に答える