簡體   English   中英

如何傳遞可選功能參數

[英]How to pass optional function parameter

我目前正在學習python並嘗試實現國際象棋。 (我已經用多種不同的語言完成了此操作)

class Board:

    def __init__(self):
        self._reset()

    def _reset(self, func=Board.default_layout):
        self.values = [[0 for x in range(8)] for i in range(8)]
        self.currentPlayer = 1
        func(self.values)

    @staticmethod
    def default_layout(values):
        pass


if __name__ == "__main__":
    b = Board()

重置方法的想法是重置板。 上面的零件將被刪除,並會調用一個函數,以初始布局將這些零件放置在板上。

有國際象棋版本,其中有不同的開始布局。 因此,我想使用默認方法使其成為可選參數: default_layout(self)

但是,此代碼無法編譯,我想知道我的問題在哪里。

我收到錯誤消息:

NameError: name 'default_layout' is not defined 

您的def _reset(self, func=Board.default_layout):被評估為Board定義的一部分,因此Board.default_layout尚未定義。

您可以將default_layout普通函數,而不是靜態方法。 使用前需要先定義它。

def default_layout(values):
    ... whatever

class Board:
    ...
    def _reset(self, func=default_layout):
        ...

或者,如果它必須是靜態方法,請不要嘗試在函數聲明中引用它。 您可以在函數主體內部引用它,因為直到實際調用函數才執行主體。

    def _reset(self, func=None):
        if func is None:
            func = Board.default_layout

作為@khelwood答案的替代方法,如果您希望保留default_layoutBoard類的靜態方法,則也可以使用lambda函數。

更改:

def _reset(self, func=Board.default_layout):

def _reset(self, func=lambda values: Board.default_layout(values)):

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM