我碰到有namedtuples使用默认参数从一个整洁的方式在这里.
from collections import namedtuple Node = namedtuple('Node', 'val left right') Node.__new__.__defaults__ = (None, None, None) Node()
节点(val =无,左=无,右=无)
如果您希望'right'的默认值为空列表,您会怎么做?您可能知道,使用可变默认参数(例如列表)是否定的.
有没有一种简单的方法来实现它?
你不能这样做,因为值__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)