我不确定这个东西是否有名字,所以到目前为止我无法在网上找到任何信息,但肯定有!
想象一下我的MWE:
def PlotElementsDict(dictionary1, dictionary2, itemToPlot, title):
# dictionary 1 and dictionary 2 are collections.OrderedDict with 'key':[1,2,3]
# i.e. there values of the keys are lists of numbers
list1 = [dictionary1[key][itemToPlot] for key in dictionary1.keys()]
list2 = [dictoinary2[key][itemToPlot] for key in dictionary2.keys()]
plt.plot(list1, label='l1, {}'.format(itemToPlot)
plt.plot(list2, label = 'l2, {}'.format(itemToPLot')
plt.legend()
plt.title(title)
return plt.show()
我如何创建一个函数(但我的问题更为通用,我希望能够为一个类执行此操作),它采用特定类型的可变数量的参数(例如n个字典)加上你只需要一个的其他参数? (例如item to plot
或可能是title
)?
在实践中,我想创建一个函数(在我的MWE中),无论我将多少字典添加到函数中,它都设法绘制该字典的给定项目,给出一个共同的标题和项目来绘制
答案 0 :(得分:2)
这对于蟒蛇星号参数样式来说是一个完美的例子,如下所示:
def PlotElementsDict(itemToPlot, title, *dictionaries):
for i, dct in enumerate(dictionaries):
lst = [dct[key][itemToPlot] for key in dct]
plt.plot(lst, label='l{}, {}'.format(i, itemToPlot))
plt.legend()
plt.title(title)
plt.show()
示例用例:
dct1 = {'key' : [1,2,3]}
dct2 = {'key' : [1,2,3]}
dct3 = {'key' : [1,2,3]}
title = 'title'
itemToPlot = 2
PlotElementsDict(itemToPlot, title, dct1, dct2, dct3)
如果您希望字典首先出现,其他参数必须只是关键字:
def PlotElementsDict(*dictionaries, itemToPlot, title):
pass
并使用显式参数名称
调用它PlotElementsDict(dct1, dct2, dct3, itemToPlot=itemToPlot, title=title)
答案 1 :(得分:0)
(因为我没有25个代表我不能发表评论,所以我会把它放在答案中)
您还可以使用可选/命名参数/参数,并在输入函数后检查参数是否具有默认值,或者用户是否输入了其他值。
http://www.diveintopython.net/power_of_introspection/optional_arguments.html