【问题标题】:Python - list resets as I update itPython - 列表在我更新时重置
【发布时间】:2015-11-17 14:06:57
【问题描述】:

我正在尝试将数据追加到列表中,但在我追加新值之前,列表似乎已重置。以下是相关代码:

这是主模块:

def update():
    global url
    data.add_price(df.pulldata(url))

这是数据模块:

historical_price = []

def add_price(price):
    historical_price.append(price)
    print(historical_price)

我猜测问题在于我将 history_price 定义为顶部为空的事实。然而,这让我感到困惑,因为整个脚本从未运行过。我该如何解决这个问题?提示表示赞赏。

【问题讨论】:

  • add_pricehistorical_price 是一个类的一部分吗?它位于哪里?如果是这种情况,您可能只想使用self.historical_pricehistorical_price 与实例相关联。不确定这是否是您的问题所在...
  • 请澄清您所说的重置是什么意思?你的意思是它被清空了?如果 data 是一个类实例, add_price 函数应该没有self 属性吗?在我看来historical_price 应该是self.historical_price = [] 并且应该相应地修改函数。
  • 请显示更多您的代码,现在类定义甚至不存在。具体来说,这段代码是怎么调用的?我们无法仅凭此重现错误。
  • 你怎么知道它被重置了?
  • 对不起,我显然是指模块而不是类。我总是让他们感到困惑。 @彼得伍德

标签: python list reset


【解决方案1】:

你从不实例化数据类,所以它在没有实例的情况下执行add_price。您应该将self 作为参数添加到add_price,并且应该像这样实例化您的数据类。

d = data()

def update():
    global url
    d.add_price(df.pulldata(url))

您还应该将historical_price 设为数据类的属性,因此数据类应如下所示。

class data:
    def __init__(self):
        self.historical_price = []

    def add_price(self, price):
        self.historical_price.append(price)
        print(self.historical_price) 

【讨论】:

  • 我想data 是一个模块名称,data.py
  • OP 明确表示他们很困惑。
  • 对不起,这是一个模块。我总是对类和模块感到困惑。
  • 在这种情况下,您应该考虑在数据模块中创建一个数据类并使用它(可能不完全使用这些名称)。否则我相信你必须让你的 historical_price 变量成为全局变量。
  • @wilbur 我已经尝试过全局变量,但我无法让它正常工作。创建一个类可能会解决它,但是为无法转移到现实世界的东西创建一个类似乎不是很荒谬吗?
【解决方案2】:

由于您的 add_price 函数位于不同的模块中,因此每次调用该方法时都会运行这部分 historical_price = []

调用全局函数首先执行所有全局代码,然后执行该函数。

要解决此问题,您可以:

  1. 使用该列表作为实例变量编写一个类,并在您的主代码中对其进行实例化。
  2. 编写该类并将方法设为静态,将列表用作类变量。
  3. 在主代码中定义 gobal 变量并将其作为参数传递给函数。

主代码是通过调用方法和实例化类来控制程序流程的顶层代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2013-03-26
    • 2017-10-16
    • 2017-12-17
    • 2022-09-28
    相关资源
    最近更新 更多