Skip to main content
 首页 » 编程设计

python之你能像在 C++ 中一样在 Python 中返回表达式的值吗或不

2025年05月04日12fff_TT

我有点困惑,我很欣赏 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") 

有人可以帮忙吗?

请您参考如下方法:

让我们把它分开一点:

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

这是因为 or 运算符的工作方式。它寻找第一个 True-like 值并返回它。如果找不到,则返回 False。

你的命令被解析为:

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

因此,从左到右解析,如果 command 不等于 "Quit",您有:

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

但是在这里,"quit" 是一个非空字符串,所以 python 认为它是“类似 True”的,所以它是返回的内容。


既然我们知道为什么它不起作用,让我们看看如何修复它:

执行此类操作的规范方法是在支持它的某些对象上使用 in 运算符:

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

元组很好(而且它们的性能比列表更好)。但是,如果您打算一遍又一遍地使用它,set 将执行最快,前提是您可以避免一遍又一遍地构建它。