1

私は少し混乱しています。SOが非常に適しているような即時の解決策をいただければ幸いです。何らかの理由でこのコード...

def process(self, command):
    return (command == "Quit" or "quit" or "Q" or "q")

...これを行う私のプログラムで同じ出力を生成します...

def process(self, command):
    return True

何??ただし、このコードは期待どおりに機能します。

def process(self, command):
    return (command == "Quit")

誰かが助けることができますか?

4

2 に答える 2

7

これを少し分けてみましょう:

>>> command = 'foo'
>>> command == "Quit" or "quit" or "Q" or "q"
'quit'

これは、orオペレーターの動作によるものです。最初のTrueに似た値を探し、それを返します。見つからない場合は、を返しますFalse

ここでのコマンドは次のように解析されます。

((((command == "Quit") or "quit") or "Q") or "q")

したがって、左から右に解析すると、command等しくない場合は"Quit"、次のようになります。

(((False or "quit") or "Q") or "q")

しかし、ここで"quit"は、は空ではない文字列であるため、Pythonはそれを「True-like」と見なし、返されるものです。


なぜ機能しないのかがわかったので、修正方法を見てみましょう。

このようなことを行うための標準的な方法は、inそれをサポートするオブジェクトで演算子を使用することです。

def process(self, command):
    return command in ("Quit","quit","Q","q")

タプルは素晴らしいです(そしてそれらはリストよりもパフォーマンスが良くなります)。ただし、何度も使用する場合は、何度も作成しないようにすれば、asetが最速で実行されます。

于 2013-03-15T00:35:59.357 に答える
1
def process(self, command):
    return command in ("Quit" , "quit" , "Q" , "q")
于 2013-03-15T00:39:47.667 に答える