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ですか? この方法の問題は、特定の関数に新しい変数を追加/削除すると、関数自体、メイン コードでのその関数の呼び出し、メイン コードでの関数の呼び出しの 4 つの場所を変更する必要があることです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かもしれませんし、これらの属性のいくつかは、個別に渡される変数であるべきかもしれませんし、1 つではなく、実際には 2 つ、あるいは 4 つの異なるクラスが存在するかもしれません。 — 渡す 9 つのものを 1 つまたは 2 つに置き換えました。

于 2013-07-12T22:34:50.803 に答える
0

あなたが望むのは、さまざまな関数によって埋められmake_plot、最後に渡されるデータ構造であることをお勧めします。これは、使用しているどの言語にも大きく当てはまります。

于 2013-07-12T22:34:24.607 に答える