“ x不在y”或“ x不在y”

2020/12/06 21:22 · python ·  · 0评论

在测试成员资格时,我们可以使用:

x not in y

或者:

not x in y

根据x,此表达式可能有许多可能的上下文y例如,它可能用于子字符串检查,列表成员资格,dict键存在。

  • 两种形式总是相等的吗?
  • 有首选的语法吗?

他们总是给出相同的结果。

实际上,not 'ham' in 'spam and eggs'在特殊情况下,执行单个“非输入”操作而不是“输入”操作,然后取反:

>>> import dis

>>> def notin():
    'ham' not in 'spam and eggs'
>>> dis.dis(notin)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE    

>>> def not_in():
    not 'ham' in 'spam and eggs'
>>> dis.dis(not_in)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE    

>>> def not__in():
    not ('ham' in 'spam and eggs')
>>> dis.dis(not__in)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE        

>>> def noteq():
    not 'ham' == 'spam and eggs'
>>> dis.dis(noteq)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               2 (==)
              9 UNARY_NOT           
             10 POP_TOP             
             11 LOAD_CONST               0 (None)
             14 RETURN_VALUE      

起初我以为它们总是给出相同的结果,但是not它本身只是一个低优先级的逻辑否定运算符,可以a in b像其他布尔表达式一样容易地应用,而not in为了方便和清楚起见,它是一个单独的运算符。

上面的拆卸很明显!看起来,虽然not显然是逻辑取反运算符,但该表格not a in b是特殊情况,因此实际上并未使用通用运算符。not a in b实际上使表达式与相同a not in b,而不仅仅是产生相同值的表达式。

  1. 不,没有区别。

    运算符not in被定义为具有的反真值in

    Python文档

  2. 我认为not in它是首选的,因为它更明显,他们为此添加了特殊情况。

它们的含义相同,但是pycodestyle Python样式指南检查器(以前称为pep8)更喜欢规则E713中not in运算符

E713:会员资格测试应为 not in

另请参见“ Pythonif x is not Noneif not x is None?” 选择非常相似的样式

其他人已经非常清楚地表明,这两个语句在相当低的水平上是等效的。

但是,我认为还没有人强调过,因为这让您自己选择,您应该

选择使您的代码尽可能可读的形式。

并且不一定对任何人都可读,即使这当然是一个不错的目标。不,请确保该代码对您来说尽可能易读,因为您是最有可能在以后返回此代码并尝试阅读它的人。

在Python中,没有区别。而且没有偏好。

从句法上讲,它们是相同的陈述。我会很快指出,它'ham' not in 'spam and eggs'传达了更清晰的意图,但是我已经看到not 'ham' in 'spam and eggs'了比其他传递了更清晰含义的代码和方案

本文地址:http://python.askforanswer.com/xbuzaiyhuo-xbuzaiy.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!