¿Qué son las constantes y las constantes literales?

Estoy aprendiendo Python y estoy confundido con las Constantes y las Constantes Literales. ¿Qué son? ¿Para qué tipo de propósito los usamos? ¿Cuál es su diferencia de la variable normal?

Muchas gracias.

Editar:

Soy un verdadero principiante. Como principiante, como puedo decir, no sé nada sobre el mundo de la progtwigción. Al igual que no sé qué es una expresión y viceversa.

He estado aprendiendo el lenguaje python usando el libro “A byte of python” y en alguna parte del libro encontré una sección que habla sobre constantes y literales. Comparto la sección allí:

5.2. Constantes literales

Un ejemplo de una constante literal es un número como 5, 1.23, o una cadena como “Esto es una cadena” o “¡Es una cadena!” .

Se llama un literal porque es literal, usas su valor literalmente. El número 2 siempre se representa a sí mismo y nada más, es una constante porque su valor no se puede cambiar. Por lo tanto, todo esto se conoce como constantes literales.

Donde dice, “se llama literal porque es literal; usas su valor literalmente”, simplemente no entiendo esta parte. ¿Cuál es el libro que intenta decir que usamos el valor literalmente? El otro punto vago es que el número 2 es una constante porque su valor no se puede cambiar. ¿Cómo es posible? Podemos cambiarlo, como:

stack = 2 stack = 3 

Primero, le asigné el número 2 a la stack, luego cambié el valor de la stack (que es el número 2 que el libro dice que es una constante, por lo que no se puede cambiar) y le asigné el número 3. Cambié el valor del número 2. Estoy realmente confundido, si no entendió mi punto, por favor dígame para que pueda dar más ejemplos. Gracias por dar su tiempo, muchachos.

Responder después de la edición de OP

Una constante literal es un valor literal real; Sé que la palabra literal te confunde, pero un ejemplo podría aclararlo. Si escribe lo siguiente en el REPL:

 >>> 2 2 >>> 'hello' 'hello' 

2 y hello son constantes literales reales y, contrariamente a lo que piensas, no puedes cambiar su valor (bueno, puedes, como principiante, es mejor no saberlo). Cuando tengas:

 stack = 2 stack = 3 

Primero está asignando el literal constante (aunque, honestamente, no se preocupe por cómo se llama, es el número 2) para stack . Entonces, la stack nombres está apuntando al valor 2 . Entonces, al decir stack = 3 , no estás cambiando el valor 2 ; ahora está haciendo que la stack nombres apunte a otro valor, 3 .

Para lo que vale, “literal constante” suena complicado; solo piense en valores como 2 o 'John' etc. como lo que son. Y con respecto a las constantes reales (en la progtwigción, las constantes se refieren a variables que no se pueden cambiar después de la asignación), ese concepto realmente no existe en Python. Una constante es cuando, por ejemplo, dices stack = 2 pero entonces nunca puedes cambiar a qué stack apunta o obtendrás un error. En Python, este concepto no existe.

Respuesta original:

Para empezar, te recomiendo que leas La historia de Ninguno, Verdadero y Falso (y una explicación de literales, palabras clave y elementos incorporados) de Guido:

Un literal, por otro lado, es un elemento de una expresión que describe un valor constante. Ejemplos de literales son los números (por ejemplo, 42, 3.14, o 1.6e-10) y las cadenas (por ejemplo, “Hola, mundo”). Los literales son reconocidos por el analizador, y las reglas exactas de cómo se analizan los literales son a menudo bastante sutiles.

En cuanto a las “constantes”, no puede declarar una variable como “constantes verdaderas” en Python. Hay algunas constantes incorporadas como True y False y None en Python, pero incluso no son “constantes verdaderas” en Python 2.X, ya que se pueden asignar para que apunten a otro valor:

 True = False if True: print 'Hey' else: print 'WAAAT!' 

Espero que esto ayude. Si no es así, edite sus preguntas y dé un ejemplo de lo que quiere decir exactamente por constantes y constantes literales.

Nota: True y False y similares son palabras clave en Python 3.x, por lo que si dice True = False , el intérprete generará SyntaxError: assignment to keyword .