在将函数作为参数传递时如何知道将parens放在哪里?

Jon*_*ove 0 python function probability

为什么我得到一个语义错误,当我通过功能rollDie()checkPascal(numTrials, roll),但是当我通过它的名字,然后把括号变量后,它的工作原理是故意的吗?(请看一下代码).我试过玩它也看,但我似乎无法正确地说出来找到答案.

这将是非常感激,因为我似乎无法弄明白.这不是一个大问题,这个问题甚至不是课堂作业的一部分.我们正在OpenCourseWare MITx课程中学习蒙特卡罗方法,我随机地想到了这一点.我不知道为什么那些parens就在那里.我以为他们应该在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)
Run Code Online (Sandbox Code Playgroud)

据我了解,'roll'只是一个变量,变量不能有参数,至少我认为.这似乎是直觉上的错误.这是因为它是一种弱类型的语言吗?我很好奇.谢谢.

kav*_*man 6

只传递名称rollDie传递函数 rollDie.这就是为什么在roll进一步向下工作之后放入parens ,你调用变量引用的函数roll.

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

尝试:

print rollDie
print rollDie() 
Run Code Online (Sandbox Code Playgroud)

看到差异.