0

我有一个定义了几个函数的代码,我从主容器代码调用这些函数。每个新函数都使用通过先前函数获得的变量,所以它看起来像这样:

import some_package
import other_package

import first_function as ff
import secon_function as sf
import third_function as tf
import make_plot as mp

# Get values for three variables from first function
var_1, var_2, var_3 = ff()

# Pass some of those values to second function and get some more
var4, var5 = sf(var_1, var_3)

# Same with third function
var_6, var_7, var_8, var_9 = tf(var_2, var_4, var_5)

# Call plotting function with (almost) all variables
mp(var_1, var_2, var_3, var_5, var_6, var_7, var_8, var_9)

这比使用全局变量更Pythonic吗?这种方法的问题在于,如果我从给定函数中添加/删除一个新变量,我将不得不修改四个地方:函数本身、主代码中对该函数的调用、主代码中对该make_plot函数的调用和make_plot函数本身。有没有更好或更推荐的方法来做到这一点?

4

2 回答 2

1

让他们上课怎么样?

class Foo(object):
    def ff(self):
        self.var_1, self.var_2, self.var_3 = ff()
    def sf(self):
        self.var_4, self.var_5 = sf(self.var_1, self.var_2)
    def tf(self):
        self.var_6, self.var_7, self.var_8, self.var_9 = tf(self.var_2, self.var_4, self.var_5)
    def plot(self):
        mp(self.var_1, self.var_2, self.var_3, 
           self.var_5, self.var_6, self.var_7, self.var_8, self.var_9)

foo = Foo()
foo.ff()
foo.sf()
foo.tf()
foo.plot()

也许这些方法中的一些应该是接受实例的模块级函数Foo,也许这些属性中的一些应该是单独传递的变量,也许这里真的有 2 个,甚至 4 个不同的类,而不是 1 个,等等。但是这个想法——你已经用 1 或 2 替换了 9 件要传递的东西。

于 2013-07-12T22:34:50.803 回答
0

我建议你想要的是一个数据结构,它由各种函数填充,然后make_plot在最后传递。这在很大程度上适用于您使用的任何语言。

于 2013-07-12T22:34:24.607 回答