Why does "not(True) in [False, True]" return False?

If I do this:

    >>> False in [False, True]
    True

That returns True. Simply because False is in the list.

But if I do:

    >>> not(True) in [False, True]
    False

That returns False. Whereas not(True) is equal to False:

    >>> not(True)
    False

Why?

Operator precedence 2.x, 3.x. The precedence of not is lower than that of in. So it is equivalent to:

    >>> not (True in [False, True])
    False

This is what you want:

    >>> (not True) in [False, True]
    True

As @Ben points out: It's recommended to never write not(True), prefer not True. The former makes it look like a function call, while not is an operator, not a function.

From: stackoverflow.com/q/31421379

Back to homepage or read more recommendations: