Dengan fungsi f
memanggil fungsi terkenal lainnya dengan Python (misalnya fungsi matplotlib
), cara apa yang paling pythonic/efisien/elegan untuk mendefinisikan beberapa nilai default sambil tetap memberikan kemungkinan kepada pengguna f
untuk sepenuhnya menyesuaikan fungsi yang dipanggil (biasanya dengan **kwargs
), termasuk untuk menimpa argumen kata kunci default yang ditentukan dalam 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()
Di sini, panggilan terakhir ke f
muncul:
TypeError: contourf() mendapat beberapa nilai untuk argumen kata kunci 'cmap'