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



所以我知道python有not运算符,但是not((函数是如何发挥作用的?

从一些简单的测试来看,它似乎具有not(args[](的签名,同时又不像正常函数那样运行。例如:

x = True
not x # -> False
not(x) # -> False
x = False
not x # -> True
not(x) # -> True
not(0) # -> True
not(1) # -> False
not(0, 0, 0) # -> False
not("False") # -> False
function = not # -> Syntax Error

为什么这存在于"不",而不是像"或"这样的东西?有没有办法将 not 函数捕获到变量中/使用 not 作为函数进行其他操作?

这个问题主要是通过尝试在映射调用中找到单个函数来反转列表而引起的,即使它是一个内部函数

没有not函数。只有运算符not.添加括号只是在表达式周围添加括号;它不是函数调用(即not(x)not x完全相同(。not(0,0,0)只是应用于元组(0,0,0)not运算符,它不是"假的",所以结果是假的。

(请注意,这是Python中的情况,其他语言可能not函数或其他方式来完全表达not(。

没有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()

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

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

如前所述,没有像Julia等其他语言那样的否定函数。

这个问题主要是通过尝试在映射调用中找到单个函数来反转列表而引起的,即使它是一个内部函数

如果要使用map调用否定布尔值列表,只需使用如下lambda

>>> mask = [True, False, True]
>>> list(map(lambda b: not b, mask))
[False, True, False]

或者,您可以将 Python 的按位 NOT~应用于numpy数组:

>>> import numpy as np
>>> mask = np.array([True, False, True])
>>> ~mask
array([False, True, False], dtype=bool)

请注意,我使用了~而不是not。numpy 数组确实不支持逻辑运算符,因此写入not mask会产生以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

希望这可以帮助某人!

最新更新