Только что узнал, что оба синтаксических способа действительны.
Что эффективнее?
element not in list
Or:
not element in list
?
Только что узнал, что оба синтаксических способа действительны.
Что эффективнее?
element not in list
Or:
not element in list
?
Они ведут себя одинаково, вплоть до создания идентичного байтового кода; они одинаково эффективны. Тем не менее, element not in list
обычно считается предпочтительным. В PEP8 нет конкретных рекомендаций по not ... in
и ... not in
, но есть рекомендации по not ... is
и ... is not
, и предпочитает последнее:
Используйте оператор
is not
вместоnot ... is
. Хотя оба выражения функционально идентичны, первое более читабельно и предпочтительно.
Чтобы показать эквивалентность в производительности, быстрая проверка байт-кода:
>>> import dis
>>> dis.dis('not x in y')
1 0 LOAD_NAME 0 (x)
2 LOAD_NAME 1 (y)
4 COMPARE_OP 7 (not in)
6 RETURN_VALUE
>>> dis.dis('x not in y')
1 0 LOAD_NAME 0 (x)
2 LOAD_NAME 1 (y)
4 COMPARE_OP 7 (not in)
6 RETURN_VALUE
Когда вы делаете:
not x in y
И если x
находится в y
, это в основном упростится до not True
, то есть:
>>> not True
False
С другой стороны, x not in y
просто проверяет not in
Чтобы увидеть тайминги (всегда очень похожие):
>>> import timeit
>>> timeit.timeit(lambda: 1 not in [1,2,3])
0.24575254094870047
>>> timeit.timeit(lambda: not 1 in [1,2,3])
0.23894292154022878
>>>
Кроме того, not
в основном просто сделайте наоборот (если что-то истинно, не сделает это ложным, то же самое с противоположным
См. not
оператор.
a is not None
илиnot a is None
) и т.д.. - person U11-Forward   schedule 28.08.2018