【发布时间】:2014-02-26 06:21:32
【问题描述】:
假设我有一个 Python 模块,其中包含一些函数:
def sumvars(x, y, z):
s = x
s += y
s += z
return s
但有时我想获得一些中间计算的结果(例如,我可以有一个反转矩阵的函数,并且想知道作为中间步骤计算的行列式)。显然,如果这些计算已经在该函数中完成,我不想再次重做这些计算。
我的第一个想法是返回一个字典:
def sumvars(x, y, z):
d = {}
s = x
d['first_step'] = s
s += y
d['second_step'] = s
s += z
d['final'] = s
return d
但我不记得 numpy 或 scipy 中有任何返回 dicts 的函数,所以这似乎不是一个好主意。 (为什么?)我也经常需要输入sumvars(x,y,z)['final']作为默认返回值......
我看到的另一个选项是创建全局变量,但在我的模块中包含一堆变量似乎是错误的,我需要记住它们的名称,而且不附加到函数本身看起来像是一个糟糕的设计选择。
对于这种情况,正确的功能设计是什么?
【问题讨论】:
-
问题是你打算如何使用这个功能。返回值的字典并没有错,但这意味着任何使用此函数的人都必须知道这一点并知道如何使用返回的字典。
-
如果您要大量使用一些中间结果,那么最好为此创建一个单独的函数。
-
在你的情况下,为什么不使用列表来存储中间结果呢?
-
@JayanthKoushik 这仍然需要对同一事物进行两次评估。
-
@zhangxaochen List, tuple, dict, 不管在这种情况下都是同一个概念。 Dict 更好,因为它具有事物的名称,因此更好的可读性。