我正在使用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