为了账号安全,请及时绑定邮箱和手机立即绑定

使用'not'和'in'关键字的语法顺序

使用'not'和'in'关键字的语法顺序

POPMUISE 2019-10-10 16:30:19
在测试成员资格时,我们可以使用:x not in y或者:not y in x根据x和,此表达式可能有许多可能的上下文y。例如,它可能用于子字符串检查,列表成员资格,字典键存在。两种形式总是相等的吗?有首选的语法吗?
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

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


实际上,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,而不仅仅是产生相同值的表达式。


查看完整回答
反对 回复 2019-10-10
?
HUH函数

TA贡献1836条经验 获得超4个赞

不,没有区别。

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


— Python文档


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


查看完整回答
反对 回复 2019-10-10
?
LEATH

TA贡献1936条经验 获得超6个赞

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


但是,我认为还没有人强调到此,既然这让您自己选择,您应该


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

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


查看完整回答
反对 回复 2019-10-10
  • 3 回答
  • 0 关注
  • 595 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信