通过python从一个函数返回变量以在另一个函数中使用

2024-09-28 17:22:56 发布

您现在位置: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))

我见过其他脚本从一个函数返回变量以在另一个函数中使用,但这一直在说“soup”没有定义。然后,如果我将soup设置为全局变量,那么我会得到一个错误,即页面是非类型的,并且我无法从中调用.find属性。任何帮助都将不胜感激


Tags: fromhttpsimporturlgetreturnhtmlpage
3条回答

这就是你正在做的

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))

print(get_next_page(data))的最后一行是使用传入的参数data运行函数get_next_page。但是,data从未定义过,因此它没有传入。所以在get_next_page的内部,它分配soup = None。然后在None上运行其他所有操作

在第二行中,您需要执行data = get_data(url),然后在调用get_next_page(data))时,数据将等于从第一个函数返回的soup

此外,您可能需要s = HTMLSession()位于get_url函数内部,或者像url一样将其传入

get_data(url)函数返回一个变量,但不存储在任何内容中。所以你可以

数据=获取数据(url) 打印(获取下一页(数据))

相关问题 更多 >