2012-08-01 85 views
-1

在Python中,布尔运算符是and, or not为什么`not(foo)`raise SyntaxError?

我在文档中找不到任何地方可以将运算符用作语句或函数;但这不会引发任何错误?

>>> not(1) 
False 

但这

>>> and(1) 
SyntaxError: Invalid Syntax 

有什么我失踪约(),允许对与我们合作?

+0

Parens也用于分组。你有一组物品,而不是通话操作。 – Keith 2012-08-01 00:58:43

+0

关闭选民:为什么?这当然是一个真正的问题。 – Marcin 2012-08-12 13:58:44

回答

6

,对于同样的原因,这个工程的工作原理:

not (True and False) 

也就是说,括号作为分组操作,指示函数调用。无论表达式是否合法,parens也是合法的,并且可用于明确地将一个整体表达式组合在一起,这可用于覆盖其他运算符的优先级(如(x + y) * z,与x + y * z不相同 - 后者相当到x + (y * z))。

and需要两个参数,这就是为什么and(1)是语法错误 - 您只能指定一个参数。然而,(x) and (y)合法。

+0

为什么它只适用于'不'而不是其他布尔值? – 2012-08-01 01:01:15

+1

因为'not'是一个*一元运算符 - 它作用于一个参数,它被赋予了右边。 '和'是一个* binary *运算符,并且有两个参数,一个在左边,一个在右边:'(x)和(y)'。 – cdhowie 2012-08-01 01:02:34

+0

是的,谢谢你,我只是自己意识到这一点! – 2012-08-01 01:06:39

3

你得到and的SyntaxError错误,因为它是一个二元运算符,因为括号不是:

(1) and(1) 

是合法的Python语法。

+0

你知道,有时它很明显。我不知道我是如何错过这个小珍闻的。 – 2012-08-01 01:06:14

相关问题