Per quanto ne so, in C & C++, la sequenza di priorità per NOT AND & OR NON è> AND> OR. Ma questo non sembra funzionare in modo simile in Python. Ho provato a cercarlo nella documentazione di Python e ho fallito (suppongo di essere un po 'impaziente). Qualcuno può chiarirlo?Priorità delle istruzioni logiche NOT AND & OR in python
risposta
not
si lega più stretto di and
che lega più stretto di or
come indicato nel language reference
non lo è, AND, OR, dal più alto al più basso in base alla documentazione https://docs.python.org/3/reference/expressions.html#operator-precedence
Ecco la tabella delle precedenze completa , la precedenza più bassa al più alto. Una riga ha la stessa priorità e catene da sinistra verso destra
- lambda
- se - altro
- o
- e
- non x
- in, non in, è, non è , <, < =,>,> =,! =, ==
- |
- ^
- &
- < <, >>
- +, -
- *, /, //,%
- + x, -x, ~ x
- **
- x [indice], x [indice: indice], x (argomenti ...), x.attributo
- (espressioni ...), [espressioni ...], {chiave: valore ...} , {espressioni. ..}
EDIT: Had la precedenza sbagliato
Questo è l'ordine relativo, sì, ma quale ha maggiore precedenza? –
Whoops, ha confuso me stesso. Grazie! –
Si noti che '**' ha alcune eccezioni annotate in una nota a piè di pagina quando si tratta della precedenza sugli operatori aritmetici. –
Degli operatori booleani la precedenza, da debole a forte, è la seguente:
or
and
not x
is not
;not in
Dove gli operatori hanno la stessa precedenza, la valutazione procede da sinistra verso destra.
Mi spiace che il tuo # 2 sia tecnicamente corretto ma ancora molto fuorviante. Prima di tutto, il documento non sembra cambiare. In secondo luogo, la tua opinione n. 2 (suggerendo che 'and' &' &' not x' viene valutata da sinistra a destra) è tecnicamente equivalente all'effetto ufficiale, ma questo è semplicemente perché quando in "cond1 e non cont2", python deve calcolare cont2 prima di default. – RayLuo
Grazie a @RayLuo, ma non era nemmeno _technically_ correct. Stavo posizionando il significato nelle righe visualizzate in modo errato che dividevano le righe in quella tabella. Guardando il documento 2.7 _today_ 'or' e' and' sembrano essere nella stessa cella usando _Firefox_ ma non _Opera_. La differenza di precedenza tra 'or' e' and' è ovvia (ad esempio '1 o 0 e 0' vs' (1 o 0) e 0') che tra 'and' e' not x' non tanto per il motivo per cui lo dai. Riparerò la mia risposta in modo che rifletta ciò che la documentazione dice _actually_. –
Non c'è nessuna buona ragione per Python di avere altra sequenza priorità di quegli operatori che ben consolidata una in (quasi) tutti gli altri linguaggi di programmazione, tra cui C/C++.
Si possono trovare in Il Python di riferimento di, parte 6.16 - Precedenza degli operatori, scaricabile (per la versione attuale e ricco di tutta la documentazione standard) da https://docs.python.org/3/download.html, o leggere online qui: 6.16. Operator precedence.
Ma c'è ancora qualcosa in Python che può trarre in inganno: Il risultato di and
e or
operatori può essere diverso da True
o False
- vedono 6.11 Boolean operations nello stesso documento.
È possibile eseguire il test seguente per determinare la precedenza di and
e or
.
primo luogo, cercare 0 and 0 or 1
nella console python
Se or
si lega prima, poi ci si aspetterebbe 0
come output.
Nella mia console, 1
è l'output. Significa and
o si associa prima o uguale a or
(forse le espressioni vengono valutate da sinistra a destra).
Quindi provare 1 or 0 and 0
.
Se or
e and
si legano allo stesso modo con l'ordine di valutazione integrato da sinistra a destra, è necessario ottenere 0
come output.
Nella mia console, 1
è l'output. Quindi possiamo concludere che and
ha priorità più alta di or
.
- 1. iPhone - Recupero delle risorse per i test delle unità logiche
- 2. tranne istruzioni in Python
- 3. Logiche in Prolog
- 4. Rimozione delle istruzioni di elaborazione con Python lxml
- 5. Effetto delle prestazioni dell'utilizzo delle istruzioni di stampa in script Python
- 6. Ambito delle variabili in istruzioni if
- 7. Disabilitazione delle istruzioni preparate in dbcp + spring + hibernate + jdbc?
- 8. Modificare la priorità in una coda di priorità personalizzata
- 9. Istruzioni di importazione locali in Python
- 10. Le istruzioni "in" python restituiscono automaticamente true
- 11. Coda priorità doppia priorità
- 12. Python on Arm, Istruzioni illegali
- 13. Genera istruzioni SQL con python
- 14. Ambito variabile Python nelle istruzioni if
- 15. funzioni lambda in PHP non sono logiche
- 16. Come ottenere un elenco di unità logiche
- 17. regex per l'analisi delle istruzioni SQL
- 18. Reflection.Emit.ILGenerator Gestione delle eccezioni "Leave" istruzioni
- 19. C# - Ubicazione delle istruzioni di utilizzo
- 20. Docker: comprensione delle istruzioni ENTRYPOINT e CMD
- 21. Utilizzo delle istruzioni CASE in LEFT OUTER JOIN in SQL
- 22. Minificazione Javascript delle istruzioni di confronto
- 23. Coda prioritaria con priorità più alta prima in Python
- 24. Come implementare le code di priorità in Python?
- 25. Golang: scope variabile all'interno delle istruzioni if
- 26. Uso delle istruzioni SSE con gcc senza assemblaggio in linea
- 27. qual è l'impatto delle istruzioni di importazione ridondanti in Java?
- 28. Uso delle istruzioni jQuery in semplici funzioni javascript
- 29. Riordino delle istruzioni e relazione prima-avvenuto in java
- 30. Come concatenarsi in cascata tra più istruzioni regex in Python
Puoi fare un esempio in cui la precedenza dell'operatore non funziona come pensi che faccia? – dodgethesteamroller