2016-01-13 81 views
-2

我正在编写一个游戏,如果用户提供一个单词,游戏会使用该单词。否则,程序应该从字典中选择一个随机单词。 Dictionary是一个全球列表。目前,默认的随机数将始终评估为0,但在其他地方正确评估。Python - len(x)不参数评估?

代码:

def game(i = random.randint(0, len(dictionary))): 
    print 'default random:', i 
    print 'random inside function:', random.randint(0, len(dictionary)) 

输出:

default random: 0 
random inside function: 40403 

能蟒蛇不能评价len个内部参数?

+0

它可以,但你应该真的把应用程序逻辑内的功能,而不是它的签名。 –

+0

[“Python中最小的惊讶”可能的重复:可变的默认参数](http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument) –

+0

不,它不能。这是设计。默认值是在函数定义时计算的,而不是在函数调用时计算的。 –

回答

0

如果你对随机数发生器说:“从0-100选择一个数字”,它选择0并不意味着随机数lib已损坏。 Python评估函数签名中的语句。

上述代码中的所有内容都与您预期的一样。 http://dilbert.com/strip/2001-10-25

+0

它每次运行时都会给出0 ... – SeeMeRaze

+0

您是否在发布的代码之前设置了随机种子(这可确保人们可以在一段时间后生成相同的序列时间)?或者当你开始时,你的字典长度是0? (我猜这是后者)(使第二个变量只是len(字典)来证明它) – Back2Basics

+0

我不确定代码之前的随机种子是什么意思。这是它所称的第一个地方。字典长度不是0,如果你看看方法的主体,我发现包括len(字典)在内的代码行可以在方法中正常工作,而不是在参数 – SeeMeRaze