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

Estoy tratando de entender por qué la print exterior devuelve None .

 >>> a = print(print("Python")) Python None >>> print(type(a))  

Me di cuenta:

 >>> a = print("hey") hey >>> type(a)  

¿Alguien puede explicar lo que sucede aquí en general? ¡Gracias!

La función print() devuelve 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 de forma predeterminada es sys.stdout ). Pero todas las expresiones en Python (incluidas las llamadas) producen un valor, por lo que en tales casos None se produce None .

Pareces confundir la impresión con volver aquí. El intérprete interactivo de Python también imprime; imprime el resultado de las expresiones ejecutadas directamente en el indicador, siempre que no produzcan None :

 >>> None >>> 'some value' 'some value' 

La cadena se hizo eco (imprimió) en su terminal, mientras que None no lo fue.

Como print() devuelve None pero escribe en la misma salida (su terminal), los resultados pueden parecer iguales, pero son acciones muy diferentes. Puedo hacer print() escribir en otra cosa, y no verás nada en el terminal:

 >>> from io import StringIO >>> output = StringIO() >>> print('Hello world!', file=output) >>> output.getvalue() 'Hello world!\n' 

La llamada a la función print() no produjo salida en el terminal, y devolvió None que luego no se hizo eco.