亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何傳遞可選函數參數

如何傳遞可選函數參數

楊__羊羊 2021-06-18 18:43:32
我目前正在學習 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):        passif __name__ == "__main__":    b = Board()重置方法的想法是重置電路板。上面的棋子將被移除,并調用一個函數,將棋子放在初始布局中的板上。有國際象棋版本,其中有不同的起始布局。因此,我想使用默認方法使其成為可選參數:default_layout(self)但是,此代碼無法編譯,我想知道我的問題出在哪里。我收到錯誤消息:NameError: name 'default_layout' is not defined 
查看完整描述

2 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

您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


查看完整回答
反對 回復 2021-06-22
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

作為@khelwood 答案的替代方法,lambda如果您更喜歡保留類default_layout的靜態方法,也可以使用函數Board。

改變:

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

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


查看完整回答
反對 回復 2021-06-22
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號