首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:函数最多接受4个参数(5个给定)

Python:函数最多接受4个参数(5个给定)
EN

Stack Overflow用户
提问于 2014-07-24 10:56:18
回答 3查看 7.7K关注 0票数 0

我的函数如下使用python:

代码语言:javascript
复制
def PlotCurve(SourceClipName,mode,TestDetails,savepath='../captures/',**args):

    curves=[]
    for a in range(0,len(args)):
        y=[]
        for testrates in TestDetails.BitratesInTest:

            stub = args[a].Directory[testrates]
            y.append(args[a].DataSet[stub][0])
            curves.append(y)

    plt.figure()
    plt.xlabel("Bitrate")
    plt.ylabel(mode)
    plt.title(TestDetails.HDorSD+" "+TestDetails.Codec + " " + SourceClipName[:-4])
    colour=["green","red","brown","orange","purple","grey","black","yellow","white",]
    CurveIDs=[]
    for x in args:
        CurveIDs.append(args.ID)
    p=[]    
    for b in range(0,len(args)-1):
        p[b].plot(TestDetails.BitratesInTest,y[b],c=colour[b])

    plt.legend((p),(CurveIDs),prop={"size":8})
    plt.savefig(os.path.join(savepath,mode+"_"+TestDetails.codec+"_"+SourceClipName[:-4]+".png"))

具体错误是

代码语言:javascript
复制
TypeEror: PlotCurve() takes at most 4 arguments (5 given)

**args是传递给函数的对象列表。

在我看来,我已经定义了一个函数,它接受5个或更多的参数(不管它是否正常工作),但是程序不同意,是什么让函数认为它最多只能有4个参数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-24 10:58:18

使用*args,而不是**kwargs (或**anything),或者用参数名调用函数。这将导致溢出参数的可变列表,然后可以迭代这些参数以提取ID。

参数必须按名称指定,才能应用于**kwargs,而不是参数计数。

请参阅kwargs?

当您不确定有多少参数可能传递给您的函数时,您将使用*args,也就是说,它允许您将任意数量的参数传递给您的函数。类似地,**kwargs允许您处理未预先定义的命名参数。

票数 3
EN

Stack Overflow用户

发布于 2014-07-24 11:39:40

当你说,**args is a list of objects that has been passed into the function,那么它是与单一*

使用**args作为参数之一定义函数时,当传递键值对时,它将无法解压缩。

**kwargs将与dictionary映射

*args将与list映射

或者你可以两者兼得,

代码语言:javascript
复制
>>> def func(argone, *args, **kwargs):
>>>    # do stuff
>>>
>>> func(1, *[1, 2, 3, 4])
>>> func(1, *[1, 2, 3, 4], **{'a': 1, 'b': 2})
>>>
票数 1
EN

Stack Overflow用户

发布于 2014-07-24 11:00:06

很可能是双重类型的*,因为命名可选位置参数的方便性是*args,可选的命名参数是**kwargs

因此,您的函数实际上接受4个位置参数和任意数量的keyword arguments。如果你这样称呼它:

代码语言:javascript
复制
PlotCurve(1,2,3,4,5) # you should get error
PlotCurve(1,2,3,4,aaa=5) # you should have args = {'aaa': 5}

要解决这个问题,很可能你需要移除第二颗星。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24931770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档