为了账号安全,请及时绑定邮箱和手机立即绑定

如何传递可选函数参数

如何传递可选函数参数

杨__羊羊 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 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号