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")

元组很好(它们的性能会比列表好)。但是,如果您要一遍又一遍地使用它,set只要您可以避免一遍又一遍地构建它,a 将执行得最快。

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