gpt4 book ai didi

Python 构造函数参数不是随机错误?

转载 作者:太空狗 更新时间:2023-10-30 01:40:47 27 4
gpt4 key购买 nike

我最近发现了这个奇怪的 Python“错误”,我想看看是否有人对此有更多了解!

以 python 模块为例:

import random

class SaySomething:
def __init__(self, value=random.randint(1, 3)):
if value == 1: print 'one'
elif value == 2: print 'two'
elif value == 3: print 'three'

a = 0

while a < 10:
SaySomething()
a += 1

由于某种原因,此代码将打印相同的数字 10 次!!!现在这个我不明白。似乎连续 10 次使用相同的值调用构造函数。但是,如果您打印每个 SaySomething(),您会发现它们都有不同的指针地址,因此它们不是同一个对象。

现在如果你改变:

SaySomething()

SaySomething(random.randint(1, 3))

它按预期运行,并进行了实际的随机选择。

有人知道为什么会这样吗?

最佳答案

问题是在创建函数时,Python 中的默认参数只计算一次。要解决此问题,请尝试:

    def __init__(self, value = None):
if value is None:
value = random.randint(1, 3)

if value == 1: print 'one'
elif value == 2: print 'two'
elif value == 3: print 'three'

这样,我们将随机化转移到函数本身,而不是在函数定义时。

关于Python 构造函数参数不是随机错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com