python - 在Python中初始化静态变量

标签 python static generator yield

上下文

假设我们要使用 Box-Muller 算法。从几个随机数 U1 和 U2 开始,我们可以生成 G1 和 G2。现在,对于任何调用,我们只想输出 G1 或 G2。在其他语言中,我们可以使用静态变量来知道是否需要生成一对新变量。如何用 Python 实现呢?

第一个想法

我知道,关于 Python 中的静态变量已经说了很多,我还必须说我有点困惑,因为答案相当分散。我找到了这个thread以及其中的引用文献。通过该线程,这里的解决方案是使用生成器。

细节决定成败

现在的问题是,我们如何初始化生成器以及如何保留(比如 G2)下一个yield

最佳答案

编写生成器是一个非常好的实践!

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() 

您还应该考虑拥有一个带有 get() 方法、re_initialize() 方法等的 BoxMuller 类。

关于python - 在Python中初始化静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8618650/

相关文章:

python - 如何使用内容编码 : gzip with Python SimpleHTTPServer

python - 从 Pandas 聚合 ("FutureWarning: using a dict with renaming is deprecated"重命名结果列)

python - 为什么静态文件在生产服务器中给出404?

ruby-on-rails-3 - 现有模型和 DB 表的 rails g 脚手架

python - 用一个值替换一系列值

c++ - 静态变量阴影全局

c++ - 错误 :a nonstatic member reference must be relative to a specific object

c - 初始化结构时出现问题

java - Java中高效的不重复密码生成器

haskell - 无限生成汉明序列的最新技术