接收参数/参数并且不做任何事情是没有意义的吗?

时间:2014-02-26 11:15:37

标签: python arguments parameter-passing

我正在从教科书中学习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'发送给这个函数?因为如果没有使用或返回它,我无法理解为什么它被发送到这个函数。

1 个答案:

答案 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个。