Return 来自一个函数的变量在另一个函数中使用 python

Return variables from one function to use in another with python

我不知道为什么这不起作用

from bs4 import *
import time
import pandas as pd
import pickle
import html5lib
from requests_html import HTMLSession

s = HTMLSession()
url = "https://cryptoli.st/lists/fixed-supply"


def get_data(url):
    r = s.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    return soup
    
def get_next_page(soup):
    page = soup.find('ul', {'class': 'pager'})
    if not page.find('a', {'class': 'btn btn-default current disabled'}):
        url = 'https://cryptoli.st/lists/fixed-supply' + \
            str(page.find('li', {'class': 'paginate_button'}).find(
                'a')[{'class': 'btn btn-default next'}])
        return url
    else:
        return


get_data(url)
print(get_next_page(soup))

我看到其他脚本 return 从一个函数中使用变量以在另一个函数中使用,但这一直说“汤”未定义。然后,如果我将 soup 设为全局变量,则会收到错误消息,即页面是 Nonetype 并且我无法调用它的 .find 属性。任何帮助将不胜感激。

print(get_next_page(data)) 的最后一行是 运行 传入参数 data 的函数 get_next_page。但是,data 从未定义,并且所以它传入 None。那么在 get_next_page 内部,它分配 soup = None。那么你是 运行 None 上的所有其他人。

在倒数第二行你需要做data = get_data(url),然后当你调用get_next_page(data))时,数据将等于你返回的soup第一个函数。

此外,您可能需要将 s = HTMLSession() 置于 get_url 函数内部,或者像 url

一样将其传入

这就是你正在做的。

def define_soup():
    soup = 'yummy'
    return soup 
def eat():
    return soup
define_soup() 
print(eat())

soup 肯定是在 define_soup() 中定义的,但它是那个函数的局部变量。没有其他功能可以使用它。所以假设因为我们调用了 define_soup() 因此我们可以在 eat() 中使用它是错误的。相反,您可以使 soup 全局化或将 define_soup() 的返回值存储在变量中。

使用全局

def define_soup():
    global soup
    soup = 'yummy'
    return soup 
def eat():
    return soup
define_soup() 
print(eat())

在 var

中存储 define_soup() 输出
def define_soup():
    soup = 'yummy'
    return soup 
def eat(soup):
    return soup
sp = define_soup() 
print(eat(sp))

get_data(url) 函数 returns 一个变量,但没有存储在任何东西中。所以你可以做

数据=get_data(url) 打印(get_next_page(数据))