¿Por qué la función de impresión devuelve Ninguno?

Resuelto asked hace 9 años • 1 respuestas

¿ Por qué se muestra el exterior printen este código None?

>>> a = print(print("Python"))
Python
None
>>> print(type(a))
<class 'NoneType'>

¿ Por qué aaparece Noneaquí, aunque heyesté 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?

 avatar Jan 15 '15 15:01
Aceptado

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 Nonese 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 Noneno.

Dado que print()regresa Nonepero 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ó Nonealgo que luego no se repitió.

Martijn Pieters avatar Jan 15 '2015 08:01 Martijn Pieters