Python 是";不在「;及;不是",;两个操作员?如果是,它们在任何方面是否与;不是x英寸……”;及;不是x是……”;?

Python 是";不在「;及;不是",;两个操作员?如果是,它们在任何方面是否与;不是x英寸……”;及;不是x是……”;?,python,Python,我一直喜欢这些: not 'x' in 'abc' not 'x' is 'a' (当然,假设每个人都知道in并且是out优先排序不是——我可能应该使用括号)而不是更(英语)语法: 'x' not in 'abc' 'x' is not 'a' 但我没有费心去想为什么,直到我意识到它们没有语法意义 'x' == not 'a' 'x' not == 'a' 当然,两者都会引发语法错误 所以我想他们都是两个词的操作符。但是,唯一的引用不是,并且没有提到不在中作为运算符。我是否误解了语法 如果

我一直喜欢这些:

not 'x' in 'abc'
not 'x' is 'a'
(当然,假设每个人都知道
in
并且
out
优先排序
不是
——我可能应该使用括号)而不是更(英语)语法:

'x' not in 'abc'
'x' is not 'a'
但我没有费心去想为什么,直到我意识到它们没有语法意义

'x' == not 'a'
'x' not == 'a'
当然,两者都会引发语法错误

所以我想他们都是两个词的操作符。但是,唯一的引用
不是
,并且没有提到
不在
中作为运算符。我是否误解了语法

如果它们都是运算符,那么它们是否与非语法对应项完全不同(甚至微妙)

如果它们是相同的,那么它们为什么存在呢?这似乎是不虔诚的(……“一个——最好只有一个——显而易见的方式”。)


如果这已经被讨论到了极点,我很抱歉,我只是很难在python 2.6.4文档中找到像“不是”这样的搜索词 >

不在中的运算符被定义为具有 in的反真值

操作员正在进行测试,且未进行测试 对象标识:如果且 仅当x和y是同一对象时。x 难道y不是相反的真理吗 价值观

例如:“x不在y中”与“x不在y中”完全相同,“x不在y中”与“x不在y中”完全相同

“x not==y”不解析,但“x!=y”解析,所以这里也有一个等价项


HTH.

来自python 2.6.4文档,位于: >

不在中的运算符被定义为具有 in的反真值

操作员正在进行测试,且未进行测试 对象标识:如果且 仅当x和y是同一对象时。x 难道y不是相反的真理吗 价值观

例如:“x不在y中”与“x不在y中”完全相同,“x不在y中”与“x不在y中”完全相同

“x not==y”不解析,但“x!=y”解析,所以这里也有一个等价项


HTH.

您的问题的其余部分已经在上面得到了回答,但我将解决最后一个问题:Python的禅宗比特


“只有一种方法可以做到这一点”在数学意义上并不意味着没有。如果是,就不会有
=
运算符,因为这只是
=
的倒数。类似地,没有
——毕竟,您可以只使用一个
nand
命令。“单向”咒语有一个限度:只有一种高层次的方法可以做到这一点。当然,这种高级方式是可以分解的——您可以编写自己的
math.tan
,而且您永远不需要使用
urllib
-
socket
随时为您服务。但正如
urllib.open
是原始
socket
操作的高级封装一样,
notin
也是
not
in
的高级封装。你可能会说,这有点陈词滥调。但您使用的是
x!=y
而不是
而不是(x==y)

您的问题的其余部分已经在上面得到了回答,但我将解决最后一个问题:Python的禅位


“只有一种方法可以做到这一点”在数学意义上并不意味着没有。如果是,就不会有
=
运算符,因为这只是
=
的倒数。类似地,没有
——毕竟,您可以只使用一个
nand
命令。“单向”咒语有一个限度:只有一种高层次的方法可以做到这一点。当然,这种高级方式是可以分解的——您可以编写自己的
math.tan
,而且您永远不需要使用
urllib
-
socket
随时为您服务。但正如
urllib.open
是原始
socket
操作的高级封装一样,
notin
也是
not
in
的高级封装。你可能会说,这有点陈词滥调。但您使用的是
x!=您的文档参考与语法无关。
不在
不在
都是两个单词运算符。

您的文档参考与语法无关。
不在
不在
都是两个字运算符。

a中的x在
中测试元素x是否在a中(在本例中可能是列表或字符串或类似的),如果在a中,则返回
True

x不在a中类似,但如果x在a中,则返回
False

另一方面,
x不是一个
类似于
x!=a
非x是a


正如您所说,x==not5将在a中给您一个排序错误

x
测试元素x是否在a中(在本例中可能是一个列表或字符串或类似的),如果是,则返回
True

x不在a中类似,但如果x在a中,则返回
False

另一方面,
x不是一个
类似于
x!=a
非x是a


正如您所说,x==not 5将给您一个排序错误

很容易通过模块检查是否有任何差异:

看到了吗?笨拙的第一种形式(通常会把那些不能立即分辨出
not
in
运算符的相对优先级的人弄糊涂)被编译成与第二种形式完全相同的字节码,其中只有一个
not in
运算符。同样地:

>>> dis.dis(compile('not a is b','','exec'))
  1           0 LOAD_NAME                0 (a)
              3 LOAD_NAME                1 (b)
              6 COMPARE_OP               9 (is not)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE        
>>> dis.dis(compile('a is not b','','exec'))
  1           0 LOAD_NAME                0 (a)
              3 LOAD_NAME                1 (b)
              6 COMPARE_OP               9 (is not)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE        
这两种形式——愚蠢、令人困惑的第一种形式和优雅的第二种形式——与完全相同的代码相比,都使用
is not
运算符

当然,没有很好的理由使用会让读者感到困惑的表单(除非你愿意)
>>> dis.dis(compile('not a is b','','exec'))
  1           0 LOAD_NAME                0 (a)
              3 LOAD_NAME                1 (b)
              6 COMPARE_OP               9 (is not)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE        
>>> dis.dis(compile('a is not b','','exec'))
  1           0 LOAD_NAME                0 (a)
              3 LOAD_NAME                1 (b)
              6 COMPARE_OP               9 (is not)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE