With numpy, the usual pattern is to get_printoptions, set some of them, and then restore the old options. Why not expose the options in a ChainMap as numpy.printoptions? ChainMap could then expose a context manager that pushes a new dictionary on entry and pops it on exit via, say, child_context that accepts a dictionary. Now, instead of:
saved_precision = np.get_printoptions()['precision']
np.set_printoptions(precision=23)
do_something()
np.set_printoptions(precision=saved_precision)
You can do the same with a context manager, which I think is stylistically better (as it's impossible to forget to reset the option, and no explicit temporary invades the local variables):
with np.printoptions.child_context({'precision', 23}):
do_something()
Best,
Neil