所以我有一些代码在重写时有点麻烦:
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
中的下一次迭代)并且不使用全局变量?
答案 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