Python中使用**kwargs传递matplotlib绘图参数触发NameError如何解决
错误原因
你遇到的NameError是因为代码中直接使用了未定义的变量title:你传入的title = "People"会被打包为**stuff字典里的键值对{'title': 'People'},要读取这个值需要通过字典的操作方式,不能直接调用title变量。
实现方案
这个需求完全可以实现,以下是两种常见写法:
写法1:仅适配当前title配置需求
不需要遍历整个kwargs,直接判断对应键是否存在即可,代码更简洁:
import matplotlib.pyplot as plt def bar(x,y,**stuff): plt.barh(x,y) # 直接判断title是否在传入的额外参数中 if 'title' in stuff: plt.title(stuff['title']) return plt.show() bar(["bob","jeff","Dave"],[1,2,3],title = "People")
写法2:支持多类绘图配置的通用写法
如果后续需要支持x轴标签、y轴标签、柱形颜色等更多配置,可以直接遍历kwargs匹配对应的绘图方法:
import matplotlib.pyplot as plt def bar(x,y,**stuff): plt.barh(x,y) for key,value in stuff.items(): if key == 'title': plt.title(value) elif key == 'xlabel': plt.xlabel(value) elif key == 'ylabel': plt.ylabel(value) # 后续需要新增其他配置直接加判断分支即可 return plt.show() # 支持传入多类配置参数 bar(["bob","jeff","Dave"],[1,2,3],title = "People", xlabel="人数", ylabel="姓名")
内容的提问来源于stack exchange,提问作者George T
相关产品推荐
相关产品推荐

