Python的not()函数不是普通函数吗?

时间:2019-12-18 15:15:56

标签: python python-3.x

所以我知道python具有not运算符,但是not()函数如何起作用?

从一些简单的测试来看,它似乎具有not(args [])的签名,但同时又不完全像普通函数那样起作用。例如:

TaskSetManager

为什么对于“ not”(而不是“ or”)之类的东西存在?有没有一种方法可以将not函数捕获到变量中/做其他不作为函数的操作?

这个问题通常是由于试图找到一个函数来反转映射调用中的列表而提示的,即使它是内部函数

4 个答案:

答案 0 :(得分:4)

没有not功能。只有运算符not。添加括号只是在表达式周围添加括号。这不是函数调用(即not(x)not x完全一样)。 not(0,0,0)只是应用于元组not的{​​{1}}运算符,它不是“ falsey”,因此结果为false。

(请注意,在Python中就是这种情况,其他语言可能具有(0,0,0)作为函数或完全表达not的某种其他方式。)

答案 1 :(得分:2)

没有not功能。在这里添加括号是完全多余的,不是函数调用:

 >>> (1) == 1
True
>>> dis.dis('not(1)')
  1           0 LOAD_CONST               0 (1)
              2 UNARY_NOT
              4 RETURN_VALUE
>>> dis.dis('not 1')
  1           0 LOAD_CONST               0 (1)
              2 UNARY_NOT
              4 RETURN_VALUE

您当然可以构建一个函数def f(x): return not x,但是您可以仅使用反真实函数,即bool()operator.truth()

答案 2 :(得分:1)

not不是关键字,也不是对象。因此,您不能将其设置为变量。

Python关键字https://www.programiz.com/python-programming/keywo

的列表

答案 3 :(得分:0)

正如已经说过的那样,没有否定函数之类的东西,就像朱莉娅等其他语言中那样。

这个问题通常是由于试图找到一个函数来反转映射调用中的列表而提示的,即使它是内部函数

如果您想使用href="https://cdn.sstatic.net/Shared/stacks.css?v=0ee8a05683e7"调用来否定布尔值列表,则可以像下面这样简单地使用map

lambda

或者,您可以将Python的按位NOT >>> mask = [True, False, True] >>> list(map(lambda b: not b, mask)) [False, True, False] 应用于~数组:

numpy

请注意,我使用的是>>> import numpy as np >>> mask = np.array([True, False, True]) >>> ~mask array([False, True, False], dtype=bool) 而不是~。 numpy数组确实不支持逻辑运算符,因此编写not会产生以下错误:

not mask

希望这可以帮助某人!