是否';在c'中不是e;不同于';e不在c'中;用Python?

是否';在c'中不是e;不同于';e不在c'中;用Python?,python,Python,可能重复: 我的助教声称e不在c中并不总是产生与不在c中相同的结果(但他没有解释原因)。我个人从未在任何人的代码中看到过第二种形式(除了他和书中解释这两种形式是等价的),也从未看到这两种形式在行为上有所不同,所以我对这一说法表示怀疑。由于没有在谷歌上找到任何东西,我决定来这里 那么,有没有人知道这两种情况下行为不同的信息呢?它们完全相同,因为它们实际上都应用了而不是比较: In [25]: def func(): 'e' not in 'bee' ....: ..

可能重复:

我的助教声称
e不在c
中并不总是产生与
不在c
中相同的结果(但他没有解释原因)。我个人从未在任何人的代码中看到过第二种形式(除了他和书中解释这两种形式是等价的),也从未看到这两种形式在行为上有所不同,所以我对这一说法表示怀疑。由于没有在谷歌上找到任何东西,我决定来这里


那么,有没有人知道这两种情况下行为不同的信息呢?

它们完全相同,因为它们实际上都应用了
而不是
比较:

In [25]: def func():
    'e' not in 'bee'
   ....:     
   ....:     

In [27]: def func1():
    not 'e' in 'bee'
   ....:     
   ....:     
In [29]: dis.dis(func)
  2           0 LOAD_CONST               1 ('e')
              3 LOAD_CONST               2 ('bee')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE        

In [30]: dis.dis(func1)
  2           0 LOAD_CONST               1 ('e')
              3 LOAD_CONST               2 ('bee')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE  

他们一模一样
not
的优先级低于
中的
,因此
not x in y
被解析为
not(x in y)
,它返回
in
的相反值,而
not in
的优先级则低于

py2k没有区别您是否暗示Python 3.x中有一个呢?我不知道py3k。我知道PY2K没有区别,下面的答案有100%的证据。。。把它带给你的助教,告诉他他错了。。。但请善意地告诉他……有一点不同:
不是c中的e
会产生额外的混乱。如果我在代码中看到它,我必须查找运算符优先级,以确定它不是c中的
(不是e)
@JanusTroelsen,它是py2k@JanusTroelsen事实上,两者都是-在3上,你会得到完全相同的输出。我从未使用过dis模块。哇,这是一个很酷的应用程序@JanusTroelsen刚刚检查,3k上的输出相同。你做的和Ben做的完全一样!->如果否定分别发生,为什么Ashwini的回答显示它产生相同的字节码?这是在优化中吗?即使显式地添加paren也不会影响生成的字节码。不过,代码块不会在注释中格式化。不过,我相信@mipadi是指它在语义上的工作方式,而不是实际的实现。@JanusTroelsen:是的,正如我指出的,我展示的是代码的语义,而不是实际生成的内容(这可能取决于实现细节)。