猿问

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

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

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

在搜索我的书籍和 Stack Overflow 时,我找到了以下选项:

  1. 我可以返回一个包含所有变量的字典,但想知道是否还有另一种方法。

  2. 全局变量:由于我不在其他地方使用参数,这似乎是不好的做法。

  3. 返回一个变量元组,但它们不会被命名。

  4. 我在 Stack Overflow 上找到的大多数答案都建议创建一个类。这会将我的函数变成一个类。

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


智慧大石
浏览 190回答 3
3回答

慕的地6264312

返回一个元组;在您的调用函数中,您可以使用隐式元组解包top_limit, bottom_limit, another_value = the_query_function()在被调用的函数中:return top_limit, bottom_limit, another_value非常干净和简单,没有样板或者你可以像你说的那样使用一个类,这真的取决于手头工作的复杂性编辑:如果代码从使用类中获利,那么一旦任务 imo 使用作业进行调用就不错了

SMILET

对这样一个问题的回答总是取决于复杂性。但是当你说:我有一个大函数可以进行多次测量。这可能是考虑重组的一个迹象。我总是喜欢让一个函数只做一件简单的事情。 Python之禅教我们“简单胜于复杂”和“复杂胜于复杂”。在那种情况下,我会使用一个类而不是一个太复杂的函数。根据经验:如果您的函数或方法超过 20 行代码或返回超过两三个参数,您应该考虑重组。在大多数情况下,您希望该函数成为“万事通”。这些函数有时会爆炸,处理它们变得越来越复杂。

catspeake

另一种选择是使用嵌套dicts 按某些标准对参数进行分组。例如: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'])这几乎没有开销(不是整个类)并且仍然具有一定的可读性。
随时随地看视频慕课网APP

相关分类

Python
我要回答