2

假设我需要将传入数据写入云上的数据集。何时、何地以及是否需要代码中的数据集,取决于传入的数据。我只想获得对数据集的一次引用。实现这一目标的最佳方法是什么?

  1. 在启动时初始化为全局变量并通过全局变量访问

    if __name__="__main__":
        dataset = #get dataset from internet
    

这似乎是最简单的方法,但即使从不需要它也会初始化变量。

  1. 第一次需要数据集时获取引用,保存在全局变量中,并使用get_dataset()方法访问

    dataset = None
    
    def get_dataset():
        global dataset
        if dataset is none
            dataset = #get dataset from internet
        return dataset
    
  2. 首次需要数据集时获取引用,保存为函数属性,通过get_dataset()方法访问

    def get_dataset():
        if not hasattr(get_dataset, 'dataset'):
            get_dataset.dataset = #get dataset from internet
        return get_dataset.dataset
    
  3. 任何其他方式

4

2 回答 2

1

您可能希望将调用数据的服务包装到一个类中

class MyService():
  dataset = None

  def get_data(self):
    if self.dataset = None:
      self.dataset = get_my_data()
    return self.dataset

然后你在你的 main 中实例化它一次,并在你需要的地方使用它。

if __name__="__main__":

  data_service = MyService()
  data = data_service.get_data()
  # or pass the service to whoever needs it
  my_function_that_uses_data(data_service)

这清楚地表明有一个dataset变量可以使用。

此外,使用对象和类使其在大型项目中更加清晰,因为功能应该从类名和方法中不言自明。

请注意,您也可以轻松地将其设为通用服务,在初始化时将其传递给获取数据的方式(如 url?),因此它可以与不同的端点重用。

与您的选项相比,与之相对的是,您可以根据需要(或错误地)多次实例化同一个类,在这种情况下,将为每个实例获取并存储数据。

于 2017-09-16T01:57:40.493 回答
0

我一直发现这样做的方式是你所说的第一大肉。对于听起来你想做的事情,那将是你最好的肉食。

于 2017-09-16T00:58:39.880 回答