【发布时间】:2014-11-13 22:18:54
【问题描述】:
我有一个函数compute_params(),它计算我想在另一个函数中使用的许多变量,比如main_func()。目前,我的代码类似于:
def compute_params(i):
a = i/2
b = a + 2.
c = 2*a/b - 1.
d = a + b + c
e = ((a + 1.)**2 - d)/c
# ...and so on with more complex computations and more variables.
return a, b, c, d, e
def main_func(imax):
for i in range(imax):
a, b, c, d, e = compute_params(i)
# Do something with a, b, c, ...
我的问题是:
- 考虑到速度问题,返回并获取 5、10 个变量(或者在我的现实生活中的函数中甚至更多)是否有问题?
- 如果第一个问题的答案是肯定的,考虑到我需要将实变量名称保留在
main_func()中(将它们放入大方程式中),如何简单地使用字典或类似的东西来做到这一点?
注意:只是为了理解我为什么要这样做,我的函数 compute_params() 在我的代码中的不同位置使用,这就是为什么它的内容不直接包含在 main_func() 中。
编辑 回答我的几个建议:我想避免使用类或字典,因为 (1) 我的变量唯一的共同点是在同一个方程中有用,因此有没有合乎逻辑的理由将它们分组到一个对象中,最重要的是(2),因为这些系数在已经很难阅读的复杂方程中出现了数百次,我想避免像 params.a + params.b/params.c 这样的事情,我现在只是写 @987654328 @。
【问题讨论】:
-
严格来说,您不会返回多个值,而是返回一个
tuple。 -
轻松作为元组返回 (a, b, c...)
-
过多的参数和/或返回值通常被认为是代码异味——您能否将这些参数封装在其他东西中(包括,是的,字典)?
-
@Matthias 我知道这种微妙之处,但除非有办法在 Python 中的函数中真正返回多个值,否则我想不区分返回多个变量和返回一个元组是合理的.
-
@jonrsharpe 我在我的问题中添加了一点来回答这个建议(我在你的回答的第一条评论中表达了同样的想法)。
标签: python dictionary return