Randomthon函数/全局变量在python中遇到麻烦?

时间:2012-05-16 20:07:20

标签: python global-variables

所以我有一些代码在重写时有点麻烦:

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使用x生成的func_A值做事。

但是,我想避免将x作为全局变量。

我的第一个想法是将func_B x=func_A()的第一行设为def,但这会使随机数发生器运行两次,x的值将会改变。

如何在x中引用func_A生成func_B而不再运行随机数发生器(直到func_B中的下一次迭代)并且不使用全局变量?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我能用所提供信息思考的简单方法是将x的生成抽象为a 新功能。像这样:

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