在模块中初始化变量的最佳方法?
Best way to initialize variable in a module?
假设我需要将传入数据写入云上的数据集中。
何时、何地以及是否需要我的代码中的数据集取决于传入的数据。
我只想获得对数据集的引用一次。
实现此目标的最佳方法是什么?
启动时初始化为全局变量,通过全局变量访问
if __name__="__main__":
dataset = #get dataset from internet
这似乎是最简单的方法,但即使从不需要它也会初始化变量。
第一次需要数据集时获取引用,保存在全局变量中,用get_dataset()
方法访问
dataset = None
def get_dataset():
global dataset
if dataset is none
dataset = #get dataset from internet
return dataset
第一次需要数据集时获取引用,保存为函数属性,使用get_dataset()
方法访问
def get_dataset():
if not hasattr(get_dataset, 'dataset'):
get_dataset.dataset = #get dataset from internet
return get_dataset.dataset
任何其他方式
我一直找到的方法就是您所说的第一个方法。对于听起来像你想做的事情,那将是你最好的方法。
您可能希望将请求数据的服务包装到 class
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
变量可供使用。
此外,使用对象和 classes 可以在大型项目中更加清晰,因为功能应该从 class 名称和方法中一目了然。
请注意,您也可以轻松地将其设为通用服务,在初始化时将其传递给获取数据的方式(如 url?),因此它可以在不同的端点上重复使用。
与您的选项相比,与之对应的是,您可以根据需要(或错误地)多次实例化相同的 class,在这种情况下,将为每个选项获取和存储数据实例.
假设我需要将传入数据写入云上的数据集中。 何时、何地以及是否需要我的代码中的数据集取决于传入的数据。 我只想获得对数据集的引用一次。 实现此目标的最佳方法是什么?
启动时初始化为全局变量,通过全局变量访问
if __name__="__main__": dataset = #get dataset from internet
这似乎是最简单的方法,但即使从不需要它也会初始化变量。
第一次需要数据集时获取引用,保存在全局变量中,用
get_dataset()
方法访问dataset = None def get_dataset(): global dataset if dataset is none dataset = #get dataset from internet return dataset
第一次需要数据集时获取引用,保存为函数属性,使用
get_dataset()
方法访问def get_dataset(): if not hasattr(get_dataset, 'dataset'): get_dataset.dataset = #get dataset from internet return get_dataset.dataset
任何其他方式
我一直找到的方法就是您所说的第一个方法。对于听起来像你想做的事情,那将是你最好的方法。
您可能希望将请求数据的服务包装到 class
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
变量可供使用。
此外,使用对象和 classes 可以在大型项目中更加清晰,因为功能应该从 class 名称和方法中一目了然。
请注意,您也可以轻松地将其设为通用服务,在初始化时将其传递给获取数据的方式(如 url?),因此它可以在不同的端点上重复使用。
与您的选项相比,与之对应的是,您可以根据需要(或错误地)多次实例化相同的 class,在这种情况下,将为每个选项获取和存储数据实例.