gpt4 book ai didi

python - contextvar 默认值的工厂

转载 作者:行者123 更新时间:2023-12-05 06:02:01 25 4
gpt4 key购买 nike

将字典设置为 ContextVar 默认值:

var: ContextVar[dict] = ContextVar('var', default={})

...有点管用,因为字典将默认可用,但它总是引用相同的实例,而不是为每个上下文生成一个新实例。

contextvars 是否以某种方式支持工厂(对于字典、列表等),如:

var: ContextVar[dict] = ContextVar('var', default=list)
var: ContextVar[dict] = ContextVar('var', default=lambda: dict())

还是我只需要手动完成:

var: ContextVar[Optional[dict]] = ContextVar('var', default=None)

...

if not var.get():
var.set({})

最佳答案

显然,ContextVars 的设计选择是在提供低级、准系统、功能而不是易用性的方向上。

没有简单的方法来获得上下文感知的命名空间,正如您打算通过将字典作为默认值来实现的那样。而且,默认值没有使用工厂而不是单个对象的选项。

克服这个问题的唯一方法是编写一个在 contextvars(或其他上下文分离机制)之上提供更高级别接口(interface)的类。

我正在开发这样一个包,虽然我还没有发布 - 主要目标是拥有一个充当免费使用命名空间的类,就像 threading.Local 实例一样。 (还有一个类使用映射接口(interface))——如果我有更多的人使用并提供一些反馈,我可以更快地完成表单:

https://github.com/jsbueno/extracontext

关于python - contextvar 默认值的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67055186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com