我有一个大函数,它可以进行许多测量。参数列表是在函数开始时从数据库和文件中读取的。其中一些参数在某种程度上属于一起(例如移动限制),另一些则是单独的。我不想把所有的参数都放在一个字典里,即使只是为了应对它的挑战
为了使函数更紧凑、更少混乱,我将所有参数的查询放在一个单独的函数中。然而,我不知道返回多个变量的最佳/正确方法。
在搜索我的书籍和Stack Overflow时,我发现以下选项:
- 我可以返回一个包含所有变量的dict,但不知道是否有其他方法
- 全局变量:由于我不在其他地方使用参数,这似乎是一种糟糕的做法
- 返回一个变量元组,但它们不会被命名
- 我在Stack Overflow上找到的大多数答案都建议创建一个类。这将把我的函数变成一个类
所以我想知道,这被认为是一种好的做法吗:为可以在一个函数中完成的事情创建一个类(只有两个函数)?
这样一个问题的答案总是取决于复杂性。
但当你说:
我有一个大函数,它可以进行许多测量。
这可能是考虑重组的一个迹象。
我总是喜欢让一个函数只做一件简单的事情。Python的禅宗教导我们"简单胜于复杂"one_answers"复杂胜于复杂"。
在这种情况下,我会使用一个类,而不是一个过于复杂的函数。
根据经验:如果您的函数或方法超过20行代码,或者返回的参数超过两三个,您应该考虑进行重组。在大多数情况下,您希望函数成为"万事通"。这些功能不时地崩溃,处理它们变得越来越复杂。
返回一个元组;在调用函数中,您可以使用隐式元组拆包
top_limit, bottom_limit, another_value = the_query_function()
在被调用的函数内部:
return top_limit, bottom_limit, another_value
非常干净简单,没有样板
或者你可以像你说的那样使用一个类,这实际上取决于手头工作的复杂性
编辑:如果代码从使用类中获利,那么使用作业进行一次调用任务imo也不错
另一个选项是使用嵌套的dict
s根据某些条件对参数进行分组。
例如:
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'])
这几乎没有开销(不是整个类),而且在某种程度上仍然可读。