我正在从教科书中学习python。此代码适用于游戏Tic-Tac-Toe。
问题的完整源代码: http://pastebin.com/Tf4KQpnk
以下功能让我感到困惑:
def human_move(board, human):
""" Get human move."""
legal = legal_moves(board)
move = None
while move not in legal:
move = ask_number("Where will you move? (0 - 8): ", 0, NUM_SQUARES)
if move not in legal: print "\nThat square is already taken. Choose another.\n"
print "Fine..."
return move
我不知道为什么函数会收到'人'参数。它似乎对它无能为力。
def human_move(board, human):
如果我从头开始编写这个游戏,我怎么知道将'human'发送给这个函数?因为如果没有使用或返回它,我无法理解为什么它被发送到这个函数。
答案 0 :(得分:1)
答案:这取决于。在你的例子中,对我来说似乎没用,但我没有深入检查它。
如果您创建的函数只能从您的代码中使用,那么它实际上是无用的。
def calculate_money(bank_name, my_dog_name):
return Bank(bank_name).money
money = calculate_money('Deutsche bank', 'Ralph')
但是如果您正在使用某种API /契约,那么您指定的回调可能会接受某些实现不需要的参数,但对于其他一些参数,则是必需的。
例如,假设在某种框架中使用了以下函数,并且您希望框架在操作完成时显示弹出窗口。它可能看起来像这样:
def my_cool_callback(names, accounts, context):
# do something blablab
context.show_message('operation finished')
但是如果你在回调中真的不需要上下文对象呢?无论如何你必须为它签名才能匹配...你不能称之为毫无意义,因为有时会使用该参数。
修改强>
另一种可能有用的情况是循环遍历具有几乎相同签名的函数列表。在那种情况下也可以将额外的参数作为“垃圾占位符”。假设您的所有函数一般需要3个参数,但只需要2个。