[英]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_layout
為Board
類的靜態方法,則也可以使用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.