Salida de Python desde la impresión (imprimir (imprimir (‘aaa’)))

No entiendo muy bien la salida recibida de:

imprimir (imprimir (imprimir (‘aaa’)))

aaa

Ninguna

Ninguna

La primera aaa es clara. Pero pensé que la segunda impresión (aaa) producirá un error ya que la variable aaa no está definida …

imprimir (imprimir (‘aaa’))

La print externa recibirá como argumento no la print interna impresa en la salida estándar, sino la print interna devuelta. Y print función de print nunca devuelve nada (equivalente a devolver None ). Es por eso que ves esta salida.

Aquí hay un ejemplo que hace lo mismo, y lo entenderás mejor:

 def f(): print('Hello') print(f()) 

Salidas:

 Hello None 

None está al final porque básicamente está print(print('Hello')) , print escribe algo en el intérprete de python y también cuando type(print()) produce: Así que esta parte está print(None) .

Por eso es que la salida de print(print(print('aaa'))) incluye None

Primero simplemente dividimos nuestro código

 >>>a = print('aaa') aaa >>>b = print(a) None >>>print(b) None 

Ahora lo entiendes !! (Python 3)

print imprime en la salida estándar y devuelve None . Su segunda statement de print obtiene el resultado de la primera print que es None

En Python, cuando una función no devuelve nada explícitamente, devuelve None .

Una función como print realiza una acción, pero no se supone que devuelva nada, por lo que devuelve Ninguna. La función de impresión podría ser algo como esto:

 import sys def print(*args, sep=' ', end='\n', file=sys.stdout, flush=False) for arg in args: file.write(str(arg)) if arg is not args[-1]: file.write(str(sep)) file.write(str(end)) if flush: sys.stdout.flush() 

Lo que equivale a:

 def print(*args, sep=' ', end='\n', file=sys.stdout, flush=False): # The same code return None 

Y en ambos casos obtendrás

 >>> print('Hello world') Hello world >>> print(print('Hello world')) Hello world None 

Espero que esto ayude.