我应该使用一个类在函数之间共享多个变量吗?

时间:2019-01-16 13:15:03

标签: python python-2.7 class variables global-variables

我有一项重要功能,可以进行多种测量。函数开始时从数据库和文件中读取参数列表。这些参数中的一些在某种程度上属于一起(例如运动极限),其他则是分开的。我不希望将所有参数都放在一个字典中,即使只是为了挑战它。

为了使函数更紧凑和更混乱,我将所有参数的查询放在单独的函数中。但是,我不知道返回多个变量的最佳/正确方法。

搜索书籍和堆栈溢出时,我发现以下选项:

  1. 我可以返回一个包含所有变量的字典,但是想知道是否还有另一种方法。
  2. 全局变量:由于我不在其他地方使用参数,因此这似乎是不好的做法。
  3. 返回一个元组变量,但随后将不命名它们。
  4. 我在Stack Overflow上找到的大多数答案都建议创建一个类。这会将我的函数变成一个类。

所以我想知道,这是否被认为是一种好习惯:为一个可以在单个函数中完成的事情创建一个类(只有两个函数)?

3 个答案:

答案 0 :(得分:1)

返回一个元组;在调用函数中,您可以使用隐式元组拆包

top_limit, bottom_limit, another_value = the_query_function()

在被调用函数内部:

return top_limit, bottom_limit, another_value

非常干净和容易,没有样板

或者您可以使用您所说的类,这实际上取决于手头工作的复杂性

编辑:如果代码从使用类中获利,那么一旦任务imo的使用就可以使用作业进行呼叫

答案 1 :(得分:1)

这个问题的答案总是取决于复杂性。

但是当你说:

  

我有一项重要功能,可以进行多种测量。

这可能是考虑进行重组的指示。

我总是喜欢让一个功能只做一件简单的事情。 Zen of Python教我们“简单胜于复杂”和“复杂胜于复杂”。

在那种情况下,我将使用类而不是过于复杂的函数。

根据经验:如果您的函数或方法超过20行代码或返回两个或三个以上参数,则应考虑进行重组。 在大多数情况下,您希望该功能成为“万事通”。这些功能有时会爆炸,处理起来也越来越复杂。

答案 2 :(得分:0)

另一种选择是使用嵌套的dict来按某些条件对参数进行分组。

例如:

d = {
    'movement_limits': {
        'top': 5,
        'bottom': 1,
    },
    'window_size': {
        'height': 10,
        'width': 10,
    },
    'num_players': 9,
}

并像这样访问它:

print(d['window_size']['height'])
print(d['movement_limits']['top'])

这几乎没有开销(不是整个类),并且仍然有些可读性。