2010-04-13 12 views
489

Eventuali duplicati:
Python: Behaviour of increment and decrement operatorsPython intero incrementando con ++

ho sempre riso di me quando ho guardato indietro ai miei giorni VB6 e pensò: "Che moderna la lingua non consente l'incremento con il doppio segno più? ":

number++ 

Con mia sorpresa, non riesco a trovare qualsiasi cosa su questo nei documenti Python. Devo davvero sottopormi allo number = number + 1? Le persone non usano la notazione ++/--?

+7

Io per primo sono abbastanza contento che non dobbiamo sopportare cose come 'a [i] = i ++;' dove l'ordine di valutazione in C++ non è definito. –

+1

Anche se esiste una cosa del genere, penso che in Python l'ordine sia ben definito. (http://docs.python.org/reference/expressions.html#evaluation-order) – kennytm

+3

Risposte alle tue domande nell'ordine indicato: "Erlang, Python, Lua ecc." (per il significato "moderno" dopo la creazione di C); "No"; e "Non necessariamente". – tzot

risposta

885

Python non supporta ++, ma si può fare:

number += 1 
+53

Penso che la spiegazione di @ Thomas sia più utile qui; Penso che la domanda sia più di "perché" e non "cosa". – rickcnagy

+1

Questo è quello che stavo cercando +1 – JMG

+1

Concordato con @rickcnagy, più come "come si fa?" (se davvero non ti interessa la brevità del codice potresti anche semplicemente fare numero = numero + 1) il ragionamento sul perché ++ e - non esistono in Python sembra più utile. – AirieFenix

20

Sì. L'operatore ++ non è disponibile in Python. A Guido non piacciono questi operatori.

+172

Forse Guido non voleva che qualcuno inviasse 'Python ++';) lol –

+0

Rende la scrittura del codice UI molto meno line-y. Beh, a parte il fatto che usare Python taglia le tue linee al 15% di quello che sarebbero in C++, heh. –

29

si può fare:

number += 1 
15

È possibile utilizzare:

number += 1 
8

Date un'occhiata a Behaviour of increment and decrement operators in Python per una spiegazione del motivo per cui questo non funziona.

Python in realtà non ha ++ e -, e personalmente non ho mai pensato che fosse una tale perdita.

Preferisco le funzioni con nomi chiari a operatori con semantica non sempre chiara (da cui la classica domanda di intervista su ++ x vs. x ++ e le difficoltà di sovraccarico). Inoltre, non sono mai stato un grande fan di ciò che fa il post-incremento per la leggibilità.

Si può sempre definire alcune classe wrapper (come accumulatore) con la semantica di incremento chiare, e poi fare qualcosa di simile x.increment() o x.incrementAndReturnPrev()

313

In poche parole, non esistono gli operatori ++ e -- in Python, perché non sarebbero operatori, avrebbero dovuto essere dichiarazioni. Tutta la modifica dello spazio dei nomi in Python è un'affermazione, per semplicità e coerenza. Questa è una delle decisioni di design. E poiché gli interi sono immutabili, l'unico modo per "cambiare" una variabile è riassegnarlo.

Fortunatamente abbiamo strumenti meravigliosi per i casi d'uso di ++ e -- in altre lingue, come il enumerate() e itertools.count().

+5

riferimento utile a 'enumerate()' e 'itertools.count()' – tato

+7

Non riesco a credere che Python prenda così sul serio la progettazione della lingua! Sto iniziando ad innamorarmi della lingua! :-) – dotslash

+2

Cerca di suggerire un sostituto elegante per questo: 'reserved_index = 0; col_names = [name if name! = '_' else 'reserved' + (reserved_index ++) per nome in column_names] '? Ho passato un elenco di nomi di colonne in cui alcuni che non sono interessanti sono solo "_". Ho bisogno di costruire una tabella temporanea con quelle "_" sostituite con nomi unici ma non significativi. L'operatore post-reinserimento sul posto renderebbe tutto più semplice; Sto faticando a trovare qualcos'altro che non implichi il loop sull'array esplicitamente. – Tom

16

Il motivo principale ++ è utile nei linguaggi C-like per tenere traccia degli indici. In Python, i dati vengono trattati in modo astratto e raramente aumentano attraverso indici e così via. La cosa più vicina allo spirito di ++ è il metodo degli iteratori next.

Problemi correlati