我想将上下文变量用于类似的目的,如下面的问题和接受的答案:Context variables in Python
对应于本例中的f3a()
:
import contextvars
user_id = contextvars.ContextVar("user_id_var")
def test():
user_id.set("SOME-DATA")
f2()
def f2():
f3a()
f3b()
def f3a():
print(user_id.get())
def f3b():
ctx = contextvars.copy_context()
for key, value in ctx.items():
if key.name == 'user_id_var':
print(value)
break
test()
但是,函数需要user_id
全局变量来获取值。如果它在不同的模块中,则需要导入它。你知道吗
我的想法是,如果一个函数知道存在一个上下文,并且它知道变量名,那应该就是它所需要的。我编写了f3b
,但正如您所见,我必须搜索所有变量,因为上下文变量不支持按名称查找。实现了按变量查找,但是如果我有变量,就可以直接从中获取值(f3a
case)
恐怕我不明白为什么它是这样设计的。为什么一个约定的名字不是关键?如果在某种框架中设置一个上下文,然后由应用程序代码使用,那么这两个函数将位于不同的模块中,而没有一个通用的模块全局变量。有人能解释一下上下文变量API背后的原理吗?你知道吗
这样就可以得到keyuser\id的值
我在official document中看到,他们提到了一些可能与您的担忧有关的事情:
和Making Context objects picklable
相关问题 更多 >
编程相关推荐