Проблемы с пониманием разницы между передачей результата другой функции и перенастройкой результата другой функции - PullRequest
0 голосов
/ 22 ноября 2018

Я написал скрипт на python, используя две функции внутри него.Предполагается, что первая функция получает некоторые ссылки с веб-страницы, а другая должна печатать ее в консоли.

Мой вопрос заключается в том, какая разница, когда я передаю результат из одной функции в другую, используя return ключевое слово типа return get_info(elem)?Обычно, делая только это get_info(elem), я могу передавать материалы из одной функции в другую, затем, когда выбрать этот return get_info(elem) и почему?

Примером может быть:

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)

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Давайте сначала упростим вашу функцию, чтобы вы могли ее запустить и сравнить результаты:

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

Ваша функция теперь возвращает print дважды.Во-первых, когда вы вызывали функцию, а во-вторых, когда вы возвращали функцию, и в этом случае фактически возвращает None, потому что get_info ничего не возвращает.

Это очевидно здесь:

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

url
>> *nothing happens* 

Результаты return более очевидны, если он действительно что-то делает, например:

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'

Если вы не используете return, это просто означает, что функция не будет ничего возвращать, что происходит, например, еслиВы просто хотите print результаты, как вы сделали.В дальнейшем вы можете попробовать это, назначив имя, как я делал выше, функции, которая не имеет возврата, и результат по существу будет None.

0 голосов
/ 22 ноября 2018
return get_info(elem)

вызовет функцию get_info(), затем возьмет все, что вернуло, и вернет то же значение из get_links().Это примерно эквивалентно:

temp = get_info(elem)
return temp

Но так как get_info() ничего не возвращает, он просто печатает ссылку, нет смысла использовать его в выражении return.Запись только

get_info(elem)

вызывает функцию, ничего не делая с ее возвращаемым значением (если оно что-то возвратило).

...