2010-04-13 18 views
489

Duplicar posibles:
Python: Behaviour of increment and decrement operatorsPython número entero de incremento ++ con

Siempre he reído de mí mismo cuando he mirado hacia atrás en mis días de VB6 y pensé: "¿Qué moderna idioma no permite el incremento con signos de doble signo? ":

number++ 

Para mi sorpresa, no puedo encontrar algo sobre esto en los documentos de Python. ¿Debo realmente someterme a number = number + 1? ¿No usan las personas la notación ++/--?

+7

Por mi parte estoy bastante contento de que no tengamos que soportar cosas como 'a [i] = i ++;' donde el orden de evaluación en C++ no está definido. –

+1

Incluso si existe tal cosa, creo que en Python el orden está bien definido. (http://docs.python.org/reference/expressions.html#evaluation-order) – kennytm

+3

Respuestas a sus preguntas en el orden dado: "Erlang, Python, Lua, etc." (para el significado "moderno" después de la creación de C); "No"; y "No necesariamente". – tzot

Respuesta

885

Python no soporta ++, pero se puede hacer:

number += 1 
+53

Creo que la explicación de @Toms es más útil aquí; Creo que la pregunta es más de 'por qué' y no' qué'. – rickcnagy

+1

Esto es lo que estaba buscando +1 – JMG

+1

Estoy de acuerdo con @rickcnagy, más como "¿cómo hacerlo?" (Si realmente no te importa la brevedad del código también puedes hacer simplemente number = number + 1) el razonamiento sobre por qué ++ y - no existe en Python parece más útil. – AirieFenix

20

Sí. El operador ++ no está disponible en Python. A Guido no le gustan estos operadores.

+172

Tal vez Guido no quería que nadie inventara 'Python ++';) lol –

+0

Sin embargo, hace que escribir el código de la UI sea mucho menos lineal. Bien, aparte del hecho de que el uso de Python corta tus líneas a 15% de lo que serían en C++, je. –

29

que puede hacer:

number += 1 
15

que puede utilizar:

number += 1 
8

Tome un vistazo a Behaviour of increment and decrement operators in Python para una explicación de por qué esto no funciona.

Python realmente no tiene ++ y -, y personalmente nunca sentí que fuera una pérdida.

Prefiero funciones con nombres claros para operadores con semántica no siempre clara (de ahí la clásica pregunta de la entrevista sobre ++ x frente a x ++ y las dificultades de sobrecargarla). Además, nunca he sido un gran admirador de lo que hace el post-incremento para la legibilidad.

Siempre se puede definir alguna clase de contenedor (como acumulador) con la semántica de incremento claras, y luego hacer algo como x.increment() o x.incrementAndReturnPrev()

313

En pocas palabras, no existen los ++ y -- operadores en Python, ya que no serían operadores, que tendrían que ser declaraciones. Toda la modificación del espacio de nombres en Python es una afirmación, por simplicidad y coherencia. Esa es una de las decisiones de diseño. Y como los enteros son inmutables, la única forma de "cambiar" una variable es reasignándola.

Afortunadamente tenemos herramientas maravillosas para los casos de uso de ++ y -- en otros idiomas, como el enumerate() y itertools.count().

+5

referencia útil para 'enumerate()' y 'itertools.count()' – tato

+7

¡No puedo creer que Python se tome tan en serio el diseño del lenguaje! ¡Estoy empezando a enamorarme del idioma! :-) – dotslash

+2

Cuide sugerir un reemplazo elegante para esto: 'reserved_index = 0; col_names = [name if name! = '_' else 'reserved' + (reserved_index ++) para el nombre en column_names] '? Me pasaron una lista de nombres de columnas donde algunos que no son interesantes son simplemente ''_''. Necesito construir una tabla temporal con esos '' _''s reemplazados con nombres únicos pero no significativos. El operador de postincremento in situ lo haría fácil; Estoy luchando para encontrar algo más que no implique un bucle explícito sobre el conjunto. – Tom

16

La razón principal ++ es útil en los lenguajes tipo C para realizar un seguimiento de los índices. En Python, usted maneja los datos de una manera abstracta y rara vez se incrementa a través de índices y tal. Lo más cercano a espíritu en ++ es el método next de iteradores.

Cuestiones relacionadas