2014-02-26 13 views
0

我正在學習一本教科書的蟒蛇。此代碼適用於遊戲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): 

我怎麼知道送「人」這個功能,如果我是從頭開始寫這個遊戲?因爲我不明白爲什麼它被髮送到這個函數,如果它沒有被使用或返回。

+0

@aIKid確定嗎?我看不到它? 'legal = legal_moves(棋盤)' – RedX

+0

這通常是沒有意義的,但我的猜測是你很快就會修改這個代碼來玩一個關鍵的遊戲。教練離開了這個參數來最大限度地減少不同遊戲之間的API攪動。 – U2EF1

回答

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個參數。

相關問題