Saltar al contenido

Entendiendo la función repr() en Python

Sé libre de compartir nuestra web y códigos en tus redes sociales, apóyanos para aumentar esta comunidad.

Solución:

>>> x = 'foo'
>>> x
'foo'

Entonces el nombre x está unido a 'foo' string. Cuando llamas por ejemplo repr(x) el intérprete pone 'foo' en vez de x y luego llama repr('foo').

>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"

repr en realidad llama a un método mágico __repr__ de x, que da la string que contiene la representación del valor 'foo' asignado a x. Entonces regresa 'foo' dentro de string "" Resultando en "'foo'". La idea de repr es dar un string que contiene una serie de símbolos que podemos escribir en el intérprete y obtener el mismo valor que se envió como argumento a repr.

>>> eval("'foo'")
'foo'

cuando llamamos eval("'foo'"), es lo mismo que escribimos 'foo' en el intérprete. Es como escribimos directamente el contenido del exterior string "" en el intérprete.

>>> eval('foo')

Traceback (most recent call last):
  File "", line 1, in 
    eval('foo')
  File "", line 1, in 
NameError: name 'foo' is not defined

si llamamos eval('foo'), es lo mismo que escribimos foo en el intérprete. Pero no hay foo variable disponible y se genera una excepción.

>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>> 

str es solo el string representación del objeto (recuerde, x variable se refiere a 'foo'), por lo que esta función devuelve string.

>>> str(5)
'5'

Representación de cadena de entero 5 es '5'.

>>> str('foo')
'foo'

Y string representacion de string 'foo' es el mismo string 'foo'.

Los comentarios que recibe sobre los usos del intérprete interactivo repr también. Cuando escribe una expresión (que sea expr), el intérprete básicamente hace result = expr; if result is not None: print repr(result). Así que la segunda línea en tu ejemplo es formateando el string foo en la representación que desee ('foo'). Y luego el intérprete crea el represtación de ese, dejándolo con comillas dobles.

¿Por qué cuando combino %r con comillas dobles y comillas simples y los imprimo, lo imprime de la forma en que lo escribiría en mi archivo .py pero no de la forma en que me gustaría verlo?

No estoy seguro de lo que estás preguntando aquí. El texto single ' and double " quotes, cuando se ejecuta repr, incluye escapes para un tipo de cotización. Por supuesto que sí, de lo contrario no sería válido. string literal por las reglas de Python. Eso es precisamente lo que pediste llamando repr.

También tenga en cuenta que el eval(repr(x)) == x la analogía no se entiende literal. Es una aproximación y se mantiene true para la mayoría (¿todos?) de los tipos incorporados, pero lo más importante es que obtienes una idea bastante buena del tipo y el “valor” lógico al mirar el repr producción.

str() se usa para crear resultados para el usuario final, mientras que repr() se usa para el desarrollo de depuración. Y representa el objeto oficial.

Ejemplo:

>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
'2018-04-08 18:00:15.178404'
>>> repr(today)
'datetime.datetime(2018, 4, 8, 18, 3, 21, 167886)'

De la salida vemos que repr() muestra la representación oficial del objeto de fecha.

Si te sientes motivado, eres capaz de dejar un ensayo acerca de qué te ha parecido este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *