在函数与全局变量之间传递变量

时间:2013-07-12 22:31:02

标签: python

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

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函数本身。是否有更好或更推荐的方法来做到这一点?

2 个答案:

答案 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。这很大程度上适用于您正在使用的任何语言。