Инициализация статической переменной в Python - PullRequest
2 голосов
/ 23 декабря 2011

Контекст

Скажем, мы хотим использовать алгоритм Бокса-Мюллера.Начиная с пары случайных чисел U1 и U2, мы можем сгенерировать G1 и G2.Теперь для любого вызова мы просто хотим вывести либо G1, либо G2.В других языках мы могли бы использовать статические переменные, чтобы знать, нужно ли нам генерировать новую пару.Как это можно сделать в Python?

Первые мысли

Я знаю, много было сказано о статических переменных в Python, я также должен сказать, что я немного сбит с толку, поскольку ответы довольнорассеян.Я нашел эту ветку и ссылки в ней.Таким образом, решением здесь было бы использование генератора.

Дьявол в деталях

Теперь проблема в том, как мы инициализируем генератор и как мы сохраняем, скажем,G2, на следующий yield?

1 Ответ

3 голосов
/ 23 декабря 2011

Написание генераторов - очень хорошая практика!

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 () и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...