我有一个代码,其中定义了几个函数,我从主容器代码调用它。每个新函数都使用先前函数获得的变量,因此看起来像这样:
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 吗?这种方法的问题是,如果我从给定函数中添加/删除一个新变量,我将被迫修改四个位置:函数本身,主代码中对该函数的调用,对{{1}的调用函数在main和make_plot
函数本身。是否有更好或更推荐的方法来做到这一点?
答案 0 :(得分: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或2代替了9件事。
答案 1 :(得分:0)
我建议你想要的是一个数据结构,它由各种函数填充,然后在最后传递给make_plot
。这很大程度上适用于您正在使用的任何语言。