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