Python 将参数传递给defaultdict创建的对象

Python 将参数传递给defaultdict创建的对象,python,defaultdict,Python,Defaultdict,我想要一个默认的dict,它在构造新对象时包含一个参数。这可能吗?有没有更好的方法 defaultdict(myobj, param1) 然后myobj: class myobj(object): def __init__(self, param1): self.param1 = param1 defaultdict接受任何可调用函数,因此您可以创建一个不接受参数的新函数,并返回一个使用所需参数实例化的对象 d = defaultdict(lambda: myobj

我想要一个默认的dict,它在构造新对象时包含一个参数。这可能吗?有没有更好的方法

defaultdict(myobj, param1)
然后myobj:

class myobj(object):

    def __init__(self, param1):
        self.param1 = param1

defaultdict
接受任何可调用函数,因此您可以创建一个不接受参数的新函数,并返回一个使用所需参数实例化的对象

d = defaultdict(lambda: myobj(param1))
另一个选项是使用functools.partial,它使用一个(或多个)预定义参数创建函数:

import functools
d = defaultdict(functools.partial(myobj, param1))

+1到琼克莱门茨的观点。注意作用域的最简单方法是使用
def
显式创建函数(/closure),然后将该函数传递给
defaultdict
。然后你就有了可以正确调试和检查的东西。我不知道lambdas没有闭包。有人知道
functools.partial
是否能更好地工作吗?
lambda
s和
def
s具有完全相同的范围规则
functools.partial
是一种很好的方法,可以避免在循环中执行此操作时遇到的麻烦。lambda确实有闭包(事实上,没有“Lambdas”这样的东西;
lambda
创建的只是一个函数,与
def
创建的函数完全相同);只是在表达式的中间创建一个未命名的对象,调试或检查变得困难得多。我已经尝试了这两种方法,但不幸的是,它们都不能通过搁置来被腌制(可腌制)。