1

そのため、書き直すのがやや面倒なコードがいくつかあります。

def func_A():

    x=[]
    # the function picks random members of the local x and rearranges them,
    # after giving x some initial value
    return x

func_Bここで、反復の実行ごとに、生成された値をfunc_B使用して処理を行うような反復を作成したいと考えています。xfunc_A

xただし、グローバル変数を作成することは避けたいです。

私が最初に考えたのは、 def の最初の行を にすることでしたfunc_B x=func_A()が、これではランダマイザーが 2 回実行され、 の値xが変更されてしまいます。

ランダマイザーを再度実行せずに (での次の反復まで)、グローバル変数を使用せずに、 で生成されるものと同じxものを参照するにはどうすればよいですか?func_Afunc_Bfunc_B

4

2 に答える 2

1

提供された情報で考えることができる最も簡単な方法は、 x の生成を新しい関数に抽象化することです。このようなもの:

def gen_x():
    x = []
    # your code here
    return x

def func_a(x):
    # your code here
    return x

def func_b(x):
    # your code here
    return x


x = gen_x()
func_a(x)
func_b(x)

もう 1 つのオプションは、func_a が x と現在の func_a の結果を含むタプルを返すことです。次に、 func_a で生成された x を func_b に渡すことができます

于 2012-05-16T20:54:20.563 に答える
1

クラスを使用する

import random
class Randomizer():
    def __init__(self):
        # Generates a list of random values
        self.x = []
        self.rng = 10
        for i in range(1,self.rng+1):
            self.x.append(random.random())            

        # Need to call once to make sure all vars defined
        self.func_A()

    # pick a random value from a list
    def func_A(self):
        self.recent = self.x[random.randint(0,self.rng-1)]
        return self.recent

    # Do something with random value picked by A
    def func_B(self):
        return self.recent*self.recent

これがあなたの言いたいことだと思いますか?

>>> r = Randomizer()
>>> r.func_A()
0.91223345147715629
>>> r.func_B()
0.83216986999392528
于 2012-05-16T20:20:39.073 に答える