2013-05-20 6 views
4

Интересно Что бы быть разница между этими двумя частями кода:Python разница между не и =

while choice != "y" and choice != "n": 
while not choice == "y" and not choice == "n": 
+0

Легче напечатать. Я бы подумал, что это более эффективно. – Volatility

+0

@ Волатильность Более эффективна для людей, чтобы читать, да. Любая разница в производительности либо не поддается измерению, либо, по крайней мере, незначительна ;-) – delnan

+0

Ну, видимо, когда я пробовал, это дало мне совершенно другой результат. С первым вариантом. Если бы я написал что-то другое между «Y» и «N», он запустил бы код, istead со вторым вариантом, которого не было бы - по какой-то причине. – GiamPy

ответ

9

Первый использует __ne__ метод объекта, в то время как второй использует __eq__ метод и сводит на нет объекта его результат.

Хотя оба метода должны сочетать их результат, поэтому a == b подразумевает, что not a != b это фактически не требуется или не применяется.

Между операторами сравнения нет никаких подразумеваемых отношений. Истина x==y не означает, что x!=y является ложным. Соответственно, при определении __eq__() следует также определить __ne__(), чтобы операторы действовали должным образом.

В вашем случае, где choice - это строка (я думаю?), Это не имеет никакого значения. Все встроенные типы обеспечивают обратную связь между == и !=. Таким образом, единственная разница в том, насколько понятна это при просмотре кода. И я лично предпочитаю более краткий первый вариант.

Смежные вопросы