所以我知道python具有not运算符,但是not()函数如何起作用?
从一些简单的测试来看,它似乎具有not(args [])的签名,但同时又不完全像普通函数那样起作用。例如:
TaskSetManager
为什么对于“ not”(而不是“ or”)之类的东西存在?有没有一种方法可以将not函数捕获到变量中/做其他不作为函数的操作?
这个问题通常是由于试图找到一个函数来反转映射调用中的列表而提示的,即使它是内部函数
答案 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不是关键字,也不是对象。因此,您不能将其设置为变量。
的列表答案 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
希望这可以帮助某人!