Python:定义具有可变数量参数的函数

时间:2017-07-19 13:34:30

标签: python function class parameters

我不确定这个东西是否有名字,所以到目前为止我无法在网上找到任何信息,但肯定有!

想象一下我的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中),无论我将多少字典添加到函数中,它都设法绘制该字典的给定项目,给出一个共同的标题和项目来绘制

2 个答案:

答案 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