在python模块中初始化变量的最佳方法

时间:2017-09-16 00:50:34

标签: python initialization global-variables function-attributes

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

  1. 在开始时初始化为全局变量,并通过全局变量

    进行访问
    get_dataset()
  2. 这似乎是最简单的方法,但即使从不需要它也会初始化变量。

    1. 第一次需要数据集时参考,保存在全局变量中,使用dataset = None def get_dataset(): global dataset if dataset is none dataset = #get dataset from internet return dataset 方法访问

      get_dataset()
    2. 第一次需要数据集时获取引用,另存为函数属性,使用def get_dataset(): if not hasattr(get_dataset, 'dataset'): get_dataset.dataset = #get dataset from internet return get_dataset.dataset 方法访问

      cordova build --release android
    3. 任何其他方式

2 个答案:

答案 0 :(得分:1)

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

class MyService():
  dataset = None

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

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

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?),以便可以在不同的端点重复使用。

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

答案 1 :(得分:0)

我总是发现这样做的方法是你说过的第一号方法。对于你想要做的事情,这将是你最好的方法。