¿Por qué la función de impresión devuelve Ninguno?
¿ Por qué se muestra el exterior print
en este código None
?
>>> a = print(print("Python"))
Python
None
>>> print(type(a))
<class 'NoneType'>
¿ Por qué a
aparece None
aquí, aunque hey
esté impreso (en lugar de None
)?
>>> a = print("hey")
hey
>>> type(a)
<class 'NoneType'>
Ver también: ¿Cuál es el propósito de la declaración de devolución? ¿En qué se diferencia de la impresión?
La print()
función regresa None
. Estás imprimiendo ese valor de retorno.
Eso es porque print()
no tiene nada que devolver; su trabajo es escribir los argumentos, después de convertirlos en cadenas, en un objeto de archivo (que por defecto es sys.stdout
). Pero todas las expresiones en Python (incluidas las llamadas) producen un valor, por lo que en tales casos None
se produce.
Parece confundir imprimir con regresar aquí. El intérprete interactivo de Python también imprime; imprime el resultado de las expresiones ejecutadas directamente en el mensaje, siempre que no produzcan None
:
>>> None
>>> 'some value'
'some value'
La cadena se repitió (imprimió) en su terminal, mientras que None
no.
Dado que print()
regresa None
pero escribe en la misma salida (su terminal), los resultados pueden parecer iguales, pero son acciones muy diferentes. Puedo print()
escribir en otra cosa y no verás nada en la terminal:
>>> from io import StringIO
>>> output = StringIO()
>>> print('Hello world!', file=output)
>>> output.getvalue()
'Hello world!\n'
La print()
llamada a la función no produjo resultados en el terminal y devolvió None
algo que luego no se repitió.