当传递函数作为参数时,如何知道在哪里放置paren?

2024-09-28 21:03:38 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么当我传递函数rollDie()checkPascal(numTrials, roll)时会出现语义错误,但当我传递它的名称,然后将paren放在变量后面时,它会按预期工作?(请看一下代码)。我试过玩弄它,也试过寻找,但我似乎无法正确地用词来找到答案。你知道吗

这将是非常感谢,因为我似乎无法找出它。这不是一个大问题,这个问题甚至不是课堂作业的一部分。我们在我的开放课件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)

据我所知,“roll”只是一个变量,变量不能有参数,至少我是这么想的。直觉上似乎是错的。这是因为它是弱类型语言吗?我很好奇。谢谢。你知道吗


Tags: andinfordefrangerandomyesd2
1条回答
网友
1楼 · 发布于 2024-09-28 21:03:38

只传递名称rollDie传递函数rollDie。这就是为什么把paren放在roll后面更进一步的原因,您正在调用roll变量引用的函数。你知道吗

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

尝试:

print rollDie
print rollDie() 

看区别。你知道吗

相关问题 更多 >