operator python „nu este (Programare, Python)

nos a intrebat.

Am observat că există un operator de comparație is not. Ar trebui să îl traduc literal în

!= 

în loc de

== not

Comentarii

4 răspunsuri
Thomas K

Pentru a extinde ceea ce a spus Ignacio:

a == b și a != b testați dacă două obiecte au același valoare. Puteți suprascrie funcția __eq__ și __ne__ pentru a determina ce înseamnă acest lucru.

a is b și a is not b testează dacă două obiecte sunt același lucru. Este ca și cum ai face id(a) == id(b)

Comentarii

  • doar că fără condiția de rasă –  > Por Lie Ryan..
  • @Lie Ryan: Vrei să elaborezi? Nu știu despre asta. –  > Por Thomas K.
  • vezi: stackoverflow.com/questions/2906177/…, în special răspunsul lui Mike Graham despre id(a.test) == id(b.test) și a.test is b.test; pentru a parafraza, id(a) == id(b) nu garantează că a și b sunt încă în viață atunci când se face comparația, și ar putea cauza unele surprize atunci când a este colectat de la gunoi înainte de comparație și b este creat chiar atunci. –  > Por Lie Ryan.
  • Interesant să mi se reamintească faptul că acest lucru încalcă regula mea mentală obișnuită că „nu X” are o precedență mai mare decât orice altceva. În schimb, este analizat ca „A (nu este) B”, unde „nu este” este un operator atomic. –  > Por Jonathan Hartley.
  • @JonathanHartley a is not b nu poate fi analizat ca a is (not b) deoarece is are o precedență mai mare decât operatorul not operator în python. Așadar, singurul mod posibil de a o analiza este ca is not. Acesta este și motivul pentru care a == not b este o eroare de sintaxă, iar not a == b este analizat ca not (a == b). –  > Por Robert.
Ignacio Vazquez-Abrams

Nu este vorba de comparație relațională, ci de identitate. Și se traduce prin not (A is B).

2r2w

documentația python 2.7.3, 5.9. Comparații:

Operatorii <, >, >, ==, >=, <= și != compară valorile a două obiecte.

și despre operatorul este în același capitol:

Operatorii is și is not testează identitatea obiectelor: x is y este adevărat dacă și numai dacă x și y sunt același obiect. x is not y produce valoarea de adevăr inversă.

zsalzbank
A != B

înseamnă că „A nu este egal cu B”, nu „A este egal cu nu B”.

Comentarii

  • Care este diferența? Dacă A nu este egal cu B, A ar trebui să fie egal cu ceva să presupunem că A este egal cu C. Asta înseamnă că C nu este egal cu B. Prin urmare, A este egal cu nu B(C). –  > Por John.
  • @John: „A este egal cu C”, „A nu este egal cu B” și „C nu este egal cu B” nu implică faptul că „(not(B)) este egal cu C”; este un raționament eronat să concluzionăm de aici că „A este egal cu not B”. –  > Por Lie Ryan.
  • Acest comentariu se bazează pe o înțelegere greșită a întrebării. „A nu este egal cu B” nu se analizează ca „A este (nu este B)”. Este analizat ca „A (nu este) B”, unde „nu este” este un operator care testează „nu (A este B)”. –  > Por Jonathan Hartley.

Tags: