0

为什么我在传递函数时出现语义错误rollDie()checkPascal(numTrials, roll)但是当我传递它的名称,然后将括号放在变量之后,它会按预期工作?(请看一下代码)。我已经尝试过使用它并且也在寻找,但我似乎无法正确地用它来找到任何地方的答案。

这将不胜感激,因为我似乎无法弄清楚。这不是什么大问题,这个问题甚至不是课堂作业的一部分。我们正在我的 OpenCourseWare MITx 课程中学习蒙特卡罗方法,我偶然发现了这一点。我不知道为什么括号在他们所在的地方。我认为它们应该在 def 行中。我正在参加以前录制的免费在线课程,所以我没有可以告诉我的讲师。谢谢。

import random

def rollDie():
    """returns a random int between 1 and 6"""
    return random.choice([1,2,3,4,5,6])

def checkPascal(numTrials, roll):
    yes = 0.0
    for i in range(numTrials):
        for j in range(24):
            d1 = roll #correct line would be d1 = roll()
            d2 = roll #d2 = roll()
            if d1 == 6 and d2 == 6:
                yes += 1
                break
    print 'Probability of losing =', 1.0 - yes/numTrials

checkPascal(10000, rollDie()) #incorrect code
#correct code would be checkPascal(10000, rollDie)

据我了解,“滚动”只是一个变量,变量不能有参数,至少我是这么认为的。这似乎在直觉上是错误的。这是因为它是弱类型语言吗?我很好奇。谢谢。

4

1 回答 1

6

只传递名称rollDie传递函数 rollDieroll这就是为什么在进一步向下工作之后放置括号,您正在调用变量引用的函数roll

传递rollDie()评估该函数,并返回random.choice([1,2,3,4,5,6])(在这种情况下roll是一个整数)

尝试:

print rollDie
print rollDie() 

看看有什么不同。

于 2013-04-14T01:53:16.373 回答