在Python中初始化静态变量
背景
假设我们想使用Box-Muller算法。我们从一对随机数U1和U2开始,可以生成G1和G2。现在,对于每次调用,我们只想输出G1或G2。在其他编程语言中,我们可以使用静态变量来判断是否需要生成一对新的数。那么在Python中该怎么做呢?
初步想法
我知道,关于Python中的静态变量已经讨论了很多,但我也有点困惑,因为答案各不相同。我找到了一些相关的讨论,这里提到的解决方案是使用生成器。
细节决定成败
现在,问题是我们如何初始化这个生成器,以及如何保留,比如说G2,以便在下次调用时使用?
1 个回答
3
写生成器是一种非常好的编程习惯!
import random
import math
def BoxMullerFormula(a,b):
c = math.sqrt(-2 * math.log(a)) * math.cos(2 * math.pi * b)
d = math.sqrt(-2 * math.log(a)) * math.sin(2 * math.pi * b)
return (c,d)
def BoxM():
while 1:
Rand01 = random.random()
Rand02 = random.random()
(a,b) = BoxMullerFormula(Rand01,Rand02)
yield a
yield b
BoxM01 = BoxM()
for i in xrange(10):
print BoxM01.next()
你还可以考虑创建一个叫做 BoxMuller 的类,里面有一个 get() 方法,还有一个 re_initialize() 方法等等。