gme*_*mon 5 python random parameters init
我需要在中分配默认随机值__init__().例如:
import math
import random
class Test:
    def __init__(self, r = random.randrange(0, math.pow(2,128)-1)):
        self.r = r
        print self.r
如果我创建了10个Test实例,它们都会获得完全相同的随机值.我不明白为什么会这样.我知道我可以在其中分配随机值__init__(),但我很好奇为什么会发生这种情况.我的第一个猜测是种子是当前时间,并且对象的创建距离太近,因此获得相同的随机值.我创建的对象间隔1秒,但结果仍然相同.
Mar*_*som 15
默认参数的值是在创建函数时设置的,而不是在调用函数时设置的 - 这就是每次都相同的原因.
处理此问题的典型方法是将默认参数设置为None并使用if语句对其进行测试.
import math
import random
class Test:
     def __init__(self, r = None):
             if r is None:
                 r = random.randrange(0, math.pow(2,128)-1)
             self.r = r
             print self.r
在random.randrange(0, math.pow(2,128)-1)定义函数时计算 ,而不是在调用时计算。
用
class Test:
    def __init__(self, r = None):
        if r is None:
            r = random.randrange(0, math.pow(2,128)-1)
        self.r = r
        print self.r
反而。
| 归档时间: | 
 | 
| 查看次数: | 1944 次 | 
| 最近记录: |