据我所知,上下文管理器用于在Python中为对象定义初始化和终止代码片段(
并提到这样做的目的是将变量
我想了解这种机制是如何工作的。在我找到的上下文管理器的解释中,我没有看到任何建议在上下文块中定义的变量或对象如何与上下文管理器“关联”。似乎该库(PyMC3)以某种方式可以访问“当前”上下文管理器,以便在幕后将每个新创建的语句与其关联起来。但是该库如何访问上下文管理器呢?
__enter__
和__exit__
)。然而,在PyMC3的教程中,他们展示了以下上下文管理器示例:basic_model = pm.Model()
with basic_model:
# Priors for unknown model parameters
alpha = pm.Normal('alpha', mu=0, sd=10)
beta = pm.Normal('beta', mu=0, sd=10, shape=2)
sigma = pm.HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2
# Likelihood (sampling distribution) of observations
Y_obs = pm.Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
并提到这样做的目的是将变量
alpha
、beta
、sigma
、mu
和Y_obs
与基本模型basic_model关联起来。我想了解这种机制是如何工作的。在我找到的上下文管理器的解释中,我没有看到任何建议在上下文块中定义的变量或对象如何与上下文管理器“关联”。似乎该库(PyMC3)以某种方式可以访问“当前”上下文管理器,以便在幕后将每个新创建的语句与其关联起来。但是该库如何访问上下文管理器呢?
__enter__
将信息推送到线程本地堆栈来完成。 - donkopotamus