python - Order of syntax for using 'not' and 'in' keywords -
when testing membership, can use:
x not in y
or alternatively:
not y in x
there can many possible contexts expression depending on x
, y
. substring check, list membership, dict key existence, example.
- are 2 forms equivalent?
- is there preferred syntax?
they give same result.
in fact, not 'ham' in 'spam , eggs'
appears special cased perform single "not in" operation, rather "in" operation , negating result:
>>> import dis >>> def notin(): 'ham' not in 'spam , eggs' >>> dis.dis(notin) 2 0 load_const 1 ('ham') 3 load_const 2 ('spam , 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 , eggs' >>> dis.dis(not_in) 2 0 load_const 1 ('ham') 3 load_const 2 ('spam , 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 , eggs') >>> dis.dis(not__in) 2 0 load_const 1 ('ham') 3 load_const 2 ('spam , eggs') 6 compare_op 7 (not in) 9 pop_top 10 load_const 0 (none) 13 return_value >>> def noteq(): not 'ham' == 'spam , eggs' >>> dis.dis(noteq) 2 0 load_const 1 ('ham') 3 load_const 2 ('spam , eggs') 6 compare_op 2 (==) 9 unary_not 10 pop_top 11 load_const 0 (none) 14 return_value
i had thought @ first gave same result, not
on own low precedence logical negation operator, applied a in b
other boolean expression, whereas not in
separate operator convenience , clarity.
the disassembly above revealing! seems while not
logical negation operator, form not in b
special cased it's not using general operator. makes not in b
literally same expression a not in b
, rather merely expression results in same value.
Comments
Post a Comment