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(),但这会运行随机器两次,并且x会更改 of 的值。

如何在不再次运行随机发生器(直到下一次迭代)并且不使用全局变量的情况下引用产生的相同x内容?func_Afunc_Bfunc_B

4

2 回答 2

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 回答
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)

另一种选择可能是 func_a 返回一个带有 x 的元组和当前 func_a 的结果。然后你可以将 func_a 生成的 x 传递给 func_b

于 2012-05-16T20:54:20.563 回答