python上下文如何与变量作用域相关?

时间:2019-07-19 07:18:55

标签: python scoping

我从“” Bayesian Methods for Hackers“中读取了示例,并且注意到通过python上下文获得的一种”魔术“:

  

在PyMC3中,我们通常在Model对象的上下文中处理模型中所需的所有变量。   与PyMC相比,这是额外的便利层。   在给定模型的上下文中创建的任何变量将是   自动分配给该模型。   如果您尝试在模型上下文之外定义变量,那么您会收到错误消息。

有问题的代码是这个

import pymc3 as pm

with pm.Model() as model:
    parameter = pm.Exponential("poisson_param", 1.0)
    data_generator = pm.Poisson("data_generator", parameter)

我试图用定义了__enter____exit__方法的自定义玩具类来复制这种行为,但是无法创建一个能使“在给定模型上下文中创建的任何变量都可以自动分配给该模型”

1 个答案:

答案 0 :(得分:1)

好的。

这些对象基本上是“智能”的,因为它们以某种方式知道当前上下文(模型)是什么,并在其中注册自己。

这是一个示例(它也支持输入嵌套上下文,尽管它们之间目前没有任何父/子层次结构。)

int i = Integer.parseInt(vars.get("{count_num}").trim());