Python 中的 "Not" 运算符

2024 年 08 月 29 日 | 阅读 9 分钟

您可以使用 Python 的 not 运算符来反转任何布尔表达式或对象的真值。此 Python 运算符可应用于布尔条件,例如 if-elif 语句以及 for 或 while 循环。它在非布尔环境中使用时,也能反转变量的真值。

通过有效使用 Python not 运算符,您可以创建精确的否定布尔表达式来控制应用程序的执行。

Python 中的布尔逻辑是什么?

布尔代数由乔治·布尔(George Boole)创立,它利用 True 和 False 值。此外,它还定义了 AND、OR 和 NOT 这几种布尔运算。这些布尔元素和运算符在编程中非常有用,因为它们可以帮助您选择程序的执行路径。

Python 中的布尔(bool)数据类型是 Python int 对象的子类。

代码

输出

True
Help on class bool in module builtins:

class bool(int)
 |  bool(x) -> bool
...

True 和 False 是此类型仅有的两个可能值,它们是 Python 的内置常量,必须大写。Python 内部将这些常量视为整数。

代码

输出

Data type of True:  <class 'bool'>
Data type of False:  <class 'bool'>
Is True an integer constant:  True
Is False an integer constant:  True
The integer value of True:  1
The integer value of False:  0

Python 中的 not 运算符是什么?

not 运算符是 Python 中用于否定任何布尔逻辑的逻辑运算符。它是一个一元运算符,只需要一个操作数。任何 Python 对象或布尔语句都可以作为 not 运算符的操作数。用户自定义对象也同样适用。not 运算符的作用是反转给定操作数的真值。

如果您将此运算符应用于等于 True 的操作数,您将得到 False 值。如果您将其应用于 False 操作数,您将得到 True。

代码

输出

The value of 'not True':  False
The value of 'not Frue':  True

not 运算符会否定给定操作数的真值。值为 True 的操作数将返回 False。值为 False 的操作数将返回 True。以下两个陈述展示了布尔逻辑运算符的真值表:

布尔值not <布尔值>
trueFalse
Falsetrue

not 可以否定任何布尔语句或对象的真值。由于此特性,它在以下情况中非常有用:

  • 在 if 语句以及 for 或 while 循环的范围内,测试未满足的需求。
  • 反转表达式的真值。
  • 确定给定值是否不存在于特定容器中。
  • 检查对象的同一性。

此外,您还可以使用标准的 Python 对象,如数字、列表、元组、字典、字符串、集合、用户自定义对象等。

代码

输出

not 0: True
not 42:  False
not 0.0:  True
not 24.0:  False
not 0 + 0j:  True
not 24 + 1j:  False
not '':  True
not 'Hello':  False
not []:  True
not [1, 4, 6]:  False
not {}:  True
not {'a': 1, 'b': 2}:  False

在所有示例中,not 都会否定或反转给定操作数的真值。Python 使用 bool() 函数来检测对象是真值(truthy)还是假值(falsy),该函数根据给定对象的真值返回 True 或 False。

在布尔上下文中使用 Python not 运算符

与其他两个布尔逻辑运算符类似,not 运算符在布尔环境中特别有用。Python 中的 if 和 else 语句定义了布尔上下文。if 语句允许条件执行,您可以根据某些初始条件选择不同的操作。

while 循环可以在某个条件为真时执行重复的活动,以执行条件迭代。您可以使用 not 运算符在 while 循环中迭代,直到某个特定条件未被满足。

这些形式可以称为控制流表达式。它们有助于选择程序的执行路径。在使用 not 运算符时,您可以选择在特定条件未满足时执行什么操作。

If 语句

如果给定条件未满足,您可以使用 not 运算符和 if 语句进行验证。您可以在相关条件前使用 not 运算符来构建所需的 if 语句,即检查某事是否未发生。由于 not 运算符会给出否定的结果,True 会变为 False,反之亦然。

带有 not 运算符的 if 条件的语法如下:

语法

在这种情况下,条件可以是任何有效的 Python 对象或布尔条件。例如,条件变量可能包含字符串、字典、列表、集合或用户自定义对象。

代码

输出

The given number 5 is a prime number

在某些情况下,如果我们只想通过复合数的条件,可以使用此函数,但带有否定的条件语句,即与 not 运算符一起使用。

代码

输出

The given number 8 is a composite number

将 Not 运算符与赋值运算符一起使用

我们可以将 not 运算符与赋值运算符一起使用。

代码

输出

50 is less than or equal to 60
50 is outside the range 10 to 40

将 Not 运算符与 While 循环一起使用

while 循环是我们可以使用 not 运算符的下一个布尔上下文。这些循环将继续执行,直到满足指定的条件,或者直到您使用 break、return 或通过引发异常等循环控制语句中断循环。通过在 while 循环中使用 not 运算符,您可以迭代直到满足指定的条件。

代码

输出

2
3
4
5
7
11
13

在非布尔上下文中使用 Python Not 运算符

由于 Python not 运算符接受普通对象作为参数,因此我们也可以在非布尔上下文中使用它。换句话说,您可以在不处于 while 循环或 if-else 语句内部的情况下使用它。not 运算符可以在非布尔上下文中反转变量的真值,这可能是最常见的应用。

代码

输出

the current flag value is False
flag is False
the current flag value is True
flag is True
the current flag value is False
flag is False
the current flag value is True
flag is True

使用 Python 基于函数的 not 运算符

Python 中的 not 运算符在 operator 模块中有一个等效的基于函数的版本,而 and 和 or 运算符则没有。该操作称为 not_()。它接受一个对象作为参数,并产生与相应的 not obj 表达式相同的结果。

代码

输出

not_(0): True
not_(42):  False
not_(0.0):  True
not_(24.0):  False
not_(0 + 0j):  True
not_(24 + 1j):  False
not_(''):  True
not_('Hello'):  False
not_([]):  True
not_([1, 4, 6]):  False
not_({}):  True
not_({'a': 1, 'b': 2}):  False

当使用 Python 的高阶函数(如 map() 和 filter())时,使用 not_() 函数而不是 not 运算符会很有帮助。以下是如何使用 not_() 函数和 sorted() 对字母列表进行排序,并在列表末尾附加空字符串的示例:

代码

输出

The sorted list is:  ['c', 'd', 'h', 'e', '', '', '', '']