超过最大递归深度及如何提高脚本效率

2024-04-29 11:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用这个库创建一个脚本:https://github.com/oczkers/fut14

但是,过了一段时间,我得到了错误“最大递归深度超过了”。后来我做了一些研究,发现我可以增加这个,但是我想知道一个更好的方法来避免这个错误,使我的脚本更有效。在

def search():
items = fut.searchAuctions('player', level='gold', max_buy=250, start=0, page_size=15)
print (items)
if items == 1:
    print (buy_now_price)
    print (trade_id)
    fut.bid(items[0]['trade_id'], 'buy_now_price')
elif items == 0:
    search()

Tags: httpsgithub脚本comidsearch错误items
1条回答
网友
1楼 · 发布于 2024-04-29 11:22:07

大多数python安装只允许递归1000个级别(python自行设置的人工限制)。在

每次函数search调用自身时,都会出现一个新的“递归级别”,其中包括在堆栈顶部保存每个函数调用的一些信息。一旦这个堆栈“增长”到足够高,您将收到一个“超过最大递归深度”。也称为堆栈溢出:)。在

为了避免这种情况,您可以将递归算法修改为迭代算法。在

有关从递归函数转换为迭代函数的算法方法,请参见this question here。它涉及到使用一个列表来模拟堆栈(列表可以比Python的堆栈大得多)。在

递归到迭代示例

虽然使用算法方法将递归函数转换为迭代函数是可行的,但这并不是最好的方法,因为您仍在使用一个不断增长的列表来表示堆栈。有时,您可以分析您的算法,并找到一种方法重写您的算法,而无需模拟任何堆栈。在

在您的示例中,似乎您只需要一个函数,它将永远运行,直到找到某个东西为止。您可以迭代地重写它,如下所示

def search():
    while True:
        items = fut.searchAuctions('player', level='gold', max_buy=250, start=0, page_size=15
        print (items)
        if items == 1:
           break

    print (buy_now_price)
    print (trade_id)
    fut.bid(items[0]['trade_id'], 'buy_now_price')

相关问题 更多 >