我刚开始使用python,正在尝试理解在函数中有参数但不使用所有参数的概念,我想知道这背后的逻辑。
代码如下所示:
def player_busts(player,dealer,chips):
print("Player busts!")
chips.lose_bet()
它需要接受三个参数:一个玩家对象、一个庄家对象和一个筹码对象。但是为什么他们只使用传入的chips对象呢?另外两个在这里有什么作用吗?
非常感谢。
发布于 2018-06-11 16:21:47
这经常发生在回调函数中。回调是指当特定事件发生时,使用某些预设参数调用的函数。
在一个较大的程序中,有另一个游戏函数调用这些函数。
def play():
player = ???()
dealer = ???()
chips = ???()
while something:
if another_thing:
action = player_wins
elif something_else:
action = player_busts
elif another_thing:
action = dealer_busts
else:
action = push
action(player, dealer, chips)
由于其中一些操作需要使用player
、dealer
、chips
或它们的任意组合,因此被调用的任何操作都需要接受这些参数,即使它不使用这些参数。
如果您这样定义player_busts
,
def player_busts(chips):
print("Player busts!")
chips.lose_bet()
如果在play
中调用它,您会得到以下错误。TypeError: player_busts takes exactly one argument (3 given)
发布于 2018-06-11 09:05:24
一个函数可以接受任意多个参数来填充它,但是不将其与函数一起使用是一种浪费。函数的目的是接受参数,并对它们做一些工作,以返回一个或多个参数。在您的示例中,只使用了芯片,因此可以删除其他两个,并保持函数的行为完全相同。
发布于 2018-06-11 10:23:14
这不是一个完整的代码示例,特别是如果您的讲师已经为您提供了它。随着课程的继续,它将添加更多功能,向您展示如何一步一步地构建完整的程序。您很可能抢先一步,在这里发布了这部分代码。
首先,函数没有返回任何东西,这意味着它正在计算一些东西,然后就到此为止了,计算的结果不能在任何地方使用。这基本上意味着更多的语句将被添加到此函数中,直到您到达return
语句。
其次,chips.lose_bet()
是一个调用函数.lose_bet()
的语句,该函数在本例中也没有定义。
第三,此函数中的参数可能是稍后定义的函数本身;当教师定义它们时,可能会从此函数中调用它们。与此类似的可能性有很多。
这几点比额外的参数在上面的代码中存在更大的漏洞。这基本上意味着,在试图理解这里发生的事情时,你实际上是草率行事。所以继续你的课程,你就会明白。
https://stackoverflow.com/questions/50789348
复制相似问题