我创建了一个树类来跟踪内部变量中的元素数量length。在此类的构造函数中,我传递了hook一个函数,length每当子树的元素数量发生变化时,该函数都会更改树的父级。
class Tree(list):
def __init__(self, change_length_hook=lambda *_:None, *args, **kwds):
super().__init__(*args, **kwds)
self.length = 0
self._change_length_hook = change_length_hook
def _change_length(self, cnt:int=1, ml:int=1):
self.length += cnt * ml
self._change_length_hook(cnt, ml)
def __add__(self, other):
if isinstance(other, Tree):
self._change_length(other.length)
return self.__class__(self + other)
self._change_length(len(other))
return self.__class__(self + list(other))
我想要某种根树的存根,它可以接受任意数量的参数,并且在调用时不执行任何操作,这样我就可以将它指定为函数的默认参数,这样调用它就不会成为树根的问题_change_length_hook。
所以我想要类似的东西lambda *_, **_: None,但它不起作用。有什么建议么?
使用数组进行回调。这将解决为什么 lambda 不起作用并且不再需要它的问题。
我最终使用了:
感谢eri 的回答,它让我意识到在这种情况下使用 lambda 表达式是不值得的。
根据PEP8,您应该“始终使用 def 运算符而不是赋值运算符,它将 lambda 表达式直接绑定到名称”
不过,如果您有兴趣,这
lambda *_, **__: (lambda **_:None)(**__)也有效