使用函数f
调用Python中另一个众所周知的函数(例如matplotlib
函数),定义一些默认值同时仍然提供可能性的最pythonic /有效/优雅方式是什么f
的用户完全自定义被调用函数(通常使用**kwargs
),包括覆盖f
中定义的默认关键字参数?
import numpy as np
import matplotlib.pyplot as plt
v = np.linspace(-10.,10.,100)
x,y = np.meshgrid(v, v)
z = -np.hypot(x, y)
def f(ax, n=12, **kwargs):
ax.contourf(x, y, z, n, cmap=plt.cm.autumn, **kwargs)
fig, ((ax0, ax1), (ax2, ax3)) = plt.subplots(2, 2)
f(ax0) # OK
f(ax1, n=100) # OK
f(ax2, n=100, **{'vmax': -2, 'alpha': 0.2}) # OK
# f(ax3, n=100, **{'cmap': plt.cm.cool}) # ERROR
plt.show()
此处,对f
的最后一次调用抛出:
TypeError:contourf()为关键字参数' cmap'
获取了多个值
答案 0 :(得分:3)
在你的包装器中,你可以简单地调整kwargs
,然后再将其传递给包装函数:
def f(ax, n=12, **kwargs):
kwargs.setdefault('cmap', plt.cm.autumn)
ax.contourf(x, y, z, n, **kwargs)
如果将参数传递给您的包装器, setdefault
将避免更改参数,但如果您愿意,您可以轻松地将其删除。