Problemas para entender la diferencia entre pasar el resultado a otra función y volver a ajustar el resultado a otra función

He escrito un script en python usando dos funciones dentro de él. Se supone que la primera función obtiene algunos enlaces de una página web y la otra debe imprimirla en la consola.

Mi pregunta es ¿qué diferencia hay cuando paso el resultado de una función a otra función usando la palabra clave return get_info(elem) como return get_info(elem) ? Por lo general, haciendo solo este get_info(elem) , puedo pasar elementos de una función a otra, luego, ¿cuándo elegir este return get_info(elem) y por qué?

Un ejemplo podría ser:

 import requests from bs4 import BeautifulSoup def get_links(url): response = requests.get(url) soup = BeautifulSoup(response.text,"lxml") elem = soup.select_one(".info h2 a[data-analytics]").get("href") get_info(elem) #why this one return get_info(elem) #or why this def get_info(link): print(link) 

Primero simplifiquemos su función para que pueda ejecutarla y comparar los resultados:

 def get_links(url): url = "this returns link: {}".format(url) get_info(url) #why this one return get_info(url) #or why this def get_info(link): print(link) get_links('google.com') >>this returns link: google.com >>this returns link: google.com 

Tu función ahora devuelve print dos veces. Primero cuando llamó a la función, y segundo cuando devolvió la función, y en este caso en realidad no devuelve None porque get_info no devuelve nada.

Esto es evidente aquí:

 url = get_links('google.com') >>this returns link: google.com >>this returns link: google.com url >> *nothing happens* 

Los resultados del retorno son más evidentes si en realidad hace algo, por ejemplo:

 def get_links(url): url = "this returns link: {}".format(url) return get_info(url) def get_info(link): return "get_info does something, {}".format(link) url = get_links('google.com') url >>'get_info does something, this returns link: google.com' 

Si no utiliza la devolución, solo significa que la función no devolverá nada, lo que sucede, por ejemplo, si solo desea print los resultados como lo hizo. Además, puede probar esto asignando un nombre como lo hice anteriormente a una función que no tiene devolución y el resultado será prácticamente None .

 return get_info(elem) 

llamará a la función get_info() , luego tomará lo que devolvió y devolverá el mismo valor de get_links() . Es aproximadamente equivalente a:

 temp = get_info(elem) return temp 

Pero como get_info() no devuelve nada, solo imprime el enlace, no tiene mucho sentido usarlo en una statement de return . Escribiendo solo

 get_info(elem) 

llama a la función sin hacer nada con su valor de retorno (si devolvió algo).