Подтвердить что ты не робот

Разве "не в в c" отличается от "e не в c" в Python?

Возможный дубликат:
Порядок синтаксиса для использования ключевых слов "нет и"

Моя TA утверждает, что e not in c не всегда дает те же результаты, что и not e in c (он не дал объяснений, почему). Я никогда лично не видел вторую форму в любом коде (кроме его и книг, объясняющих, что эти два эквивалента), и никогда не видел, чтобы они отличались поведением, поэтому я подозрительно отношусь к этому утверждению. Не найдя ничего на этом через Google, я решил приехать сюда.

У кого-нибудь есть информация о любом случае, в котором поведение двух отличается?

4b9b3361

Ответ 1

Они точно такие же, как и на самом деле применяют сравнение not in:

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  

Ответ 2

Они идентичны. not имеет более низкий приоритет, чем in, поэтому not x in y анализируется как not (x in y), который возвращает противоположность in, что и делает not in.