Python 将参数传递给defaultdict创建的对象
我想要一个默认的dict,它在构造新对象时包含一个参数。这可能吗?有没有更好的方法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
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
创建的函数完全相同);只是在表达式的中间创建一个未命名的对象,调试或检查变得困难得多。我已经尝试了这两种方法,但不幸的是,它们都不能通过搁置来被腌制(可腌制)。