如何在python中创建一个带有上下文的函数



我正在使用matplotlib,对于某个程序,我需要仅在上下文中更改matplotlib参数,而不是所有文档,所以我需要使用这个带有大量参数的上下文中,

with plt.rc_context(rc={'figure.figsize':(10,9),
'font.size':17,
....
'xtick.top':True,
'ytick.right':True,
'xtick.minor.visible':True,
'ytick.minor.visible':True }):

由于有很多参数,为了清理代码,我打算将所有这些代码放在一个单独的存档中,然后将其作为函数导入,

def context():
with plt.rc_context( ... ):

但是不能这样做,因为函数没有"关闭"而产生错误(SyntaxError: unexpected EOF while parsing)。

我的问题是是否有某种方式传递这个"context"在函数内部。

我想你可能会问的是如何创建你自己的上下文管理器,你可以使用with(这就是这个评论的建议)。但实际上,有一个比这更简单的解决方案。

rc_context本身已经是一个上下文管理器。如果你想制作自己的"版本"在特定的上下文中,您可以使用functools.partial:

来完成部分应用程序。
from functools import partial
my_mpl_context = partial(plt.rc_context, rc={
# fill in your mpl settings here
})

然后你可以这样使用:

with my_mpl_context():
# make plots, etc...

要使您的代码工作,您需要在with块中使用yield。为了使context成为一个上下文管理器,你可以用contextlib.contextmanager来装饰它:

from contextlib import contextmanger
@contextmanager
def context():
with plt.rc_context( ... ):
yield

最新更新