gpt4 book ai didi

python - Flask - 在递归函数调用时忽略默认参数(在单独调用之间累积的值)

转载 作者:行者123 更新时间:2023-12-04 03:42:31 28 4
gpt4 key购买 nike

<分区>

我在并行调用 flask api 时遇到了问题(只有 2 个实例出现问题)。在我的完整代码中,我从一个表中请求数据,然后创建一个将显示在前端的 json 树。我注意到我的树看起来很奇怪,第一棵没问题,但第二棵树包含第一棵树的所有节点,然后只包含第二棵树的节点)。

我正在调用一个递归函数来构建我的树,看起来有些变量在两个并行执行之间“共享”(这对我来说没有意义,因为我正在调用 2 个不同实例的方法一个对象)。

我创建了下面的示例来复制我的问题。

结果变量应该是一个列表,其中包含每个递归执行的数字(所以对于 5,我希望 [1 2 3 4 5]

但是当我多次执行代码(通过刷新)时,我可以看到我的结果列表变得越来越大(所以在几次刷新之后,我的列表是 [1 2 3 ...75](并且递归只能执行 5 到 15 次)

我在递归方法的初始调用中没有指定 numbers 参数:

result = test_recursive.recursive_function(random.randint(5, 15))

因为我希望它被初始化为默认值中指定的空数组:

def recursive_function(self, iterations, numbers=[]):

numbers 列表似乎没有重新初始化为空数组,但它保留了上次执行的值。我对这怎么可能感到有点困惑......

我可以通过显式指定 numbers 参数来解决我的问题结果 = test_recursive.recursive_function(random.randint(5, 15), [])

然而,我对这个解决方案并不是很满意,因为在我的实际递归函数中有更多的参数具有默认值,而且我不明白这个问题的根本原因。

我的代码有问题吗?或者这是一个错误?

flask 蓝图

class get_dimension_json(Resource):
def get(self, dimension, hierarchy):
try:
test_recursive = TestRecursive(dimension, random.randint(1, 5) / 10)
result = test_recursive.recursive_function(random.randint(5, 15))
log.debug('result %s %s : %s', dimension, hierarchy, result)
return {'msg': 'result}, 200
except Exception as e:
log.debug('get_dimension_json get %s %s finished with errors', dimension, hierarchy)
log.debug(e)
return {'msg': repr(e)}, 500

api.add_resource(
get_dimension_json,
'/api/report/dimension-json/<string:dimension>/<string:hierarchy>',
)

testRecursive.py

import time
import logging

log = logging.getLogger(__name__)


class TestRecursive:
def __init__(self, name, seconds_delay):
self.name = name
self.seconds_delay = seconds_delay

def recursive_function(self, iterations, numbers=[]):
time.sleep(self.seconds_delay)
log.debug('%s - %s', self.name, iterations)
numbers.append(len(numbers) + 1)
if iterations > 0:
self.recursive_function(iterations - 1, numbers)
return numbers

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com