当前位置:  开发笔记 > 编程语言 > 正文

Python namedtuple的可变默认参数

如何解决《Pythonnamedtuple的可变默认参数》经验,为你挑选了1个好方法。

我碰到有namedtuples使用默认参数从一个整洁的方式在这里.

from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Node.__new__.__defaults__ = (None, None, None)
Node()

节点(val =无,左=无,右=无)

如果您希望'right'的默认值为空列表,您会怎么做?您可能知道,使用可变默认参数(例如列表)是否定的.

有没有一种简单的方法来实现它?



1> BrenBarn..:

你不能这样做,因为值__defaults__是实际的默认值.也就是说,如果你编写了一个确实具有的函数,someargument=None然后在函数体内部进行了检查someargument = [] if someargument is None else someargument,那么相应的__defaults__条目仍然是None.换句话说,您可以使用函数执行此操作,因为在函数中您可以编写代码来执行任何操作,但您无法在namedtuple中编写自定义代码.

但是如果你想要默认值,只需创建一个具有该逻辑的函数,然后创建正确的namedtuple:

def makeNode(val=None, left=None, right=None):
    if right is None:
        val = []
    return Node(val, left, right)


这个解决方案的缺点是必须知道 - 或者记住 - 实际使用工厂函数而不是`Node`类.这种设计选择并非总是如此.
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有