在Python中初始化静态变量

2 投票
1 回答
997 浏览
提问于 2025-04-17 08:55

背景

假设我们想使用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() 方法等等。

撰写回答