Python:如何存储函数中为该函数的第二次调用生成的值

时间:2014-10-21 08:42:02

标签: python

我想创建一个随机数生成代码,输入" count"数字是程序中调用的次数。我想要做的是我想要创建2个随机数的函数的偶数次调用,这些随机数是" y1,y2"然而我只想输出y1而 保存y2以便下次调用函数。因此,在奇数次调用时,函数将直接输出前一次调用的y2。感谢帮助。到目前为止的代码:

import random
import math

def gaussianRandom ( count):
 count += 1
 if count%2 == 0:
  while (1):
   x1 = random.uniform(-1, 1)
   x2 = random.uniform(-1, 1)
   r = x1**2 + x2**2     
   if (r < 1):
    break

  y1 = x1 * math.sqrt( (-2 * math.log(r)) / r )
  y2 = x2 * math.sqrt( (-2 * math.log(r)) / r )

return y1

2 个答案:

答案 0 :(得分:2)

函数可以有属性。

import random
import math

def gaussianRandom ( count):
    count += 1
    if count%2 == 0:
        while (1):
            x1 = random.uniform(-1, 1)
            x2 = random.uniform(-1, 1)
            r = x1**2 + x2**2
            if (r < 1):
                break

    y1 = x1 * math.sqrt( (-2 * math.log(r)) / r )
    gaussianRandom.y2 = x2 * math.sqrt( (-2 * math.log(r)) / r )

    print(gaussianRandom.y2)
    return y1

gaussianRandom.y2 = 99
print "y2", gaussianRandom(3)
print gaussianRandom(3)
print gaussianRandom(3)
  

y2 0.919282832355

     

-0.0887376744533

     

y2 -1.71553385287

     

0.422645022058

     

y2 -0.0668389339817

     

0.600351205084

答案 1 :(得分:1)

你真的需要(或想要)告诉gaussianRandom()你打算多少次打电话给它?这似乎对我有点限制。

我认为使用生成器函数可以更好地解决这个问题。下面的代码显示了如何创建一种以及如何使用它的方法。该生成器不是实现高斯算法,而是简单地生成6n±1形式的数字,因此您可以轻松查看正在发生的事情。

#! /usr/bin/env python

''' Generator demo '''

def gen():
    x = 6
    while True:
        yield x-1
        yield x+1
        x += 6


def main():
    g = gen()
    for i in xrange(10):
        print i, g.next()

    print [(i, v) for i,v in zip(xrange(10), gen())]


if __name__ == "__main__":
    main()

<强>输出

0 5
1 7
2 11
3 13
4 17
5 19
6 23
7 25
8 29
9 31
[(0, 5), (1, 7), (2, 11), (3, 13), (4, 17), (5, 19), (6, 23), (7, 25), (8, 29), (9, 31)]