为什么不能在Python中使用变量作为参数来调用此函数?

时间:2019-03-09 09:33:58

标签: python

示例:

def somerando(a,b,c,d):
    if not a+b+c+d == 9000:
        return (a+b+c+d)

somerando(1,2,3,4)

返回:10

但是

randonumbs = [1,2,3,4]

somerando(randonumbs)

给出以下错误:

  

TypeError跟踪(最近的呼叫   最后)   ----> 1 somerando(randonumbs)

     

TypeError:somerando()缺少3个必需的位置参数:'b',   'c'和'd'

3 个答案:

答案 0 :(得分:1)

您的函数需要4个参数。 randonumbs = [1,2,3,4]是一个列表(包含四个项目);这是您的函数的一个参数。

您可以这样做:

randonumbs = [1,2,3,4]
somerando(*randonumbs)

in this questionPEP 3132中讨论了星号(*)的用法。

答案 1 :(得分:0)

您将 randonumbs 作为列表传递,这意味着此整个列表被视为函数somerando 的第一个参数
您可以使用 somerando(*randonumbs)

在这里,*表示作为 tuple 通过&**表示作为 dictionary (键,值对)通过,如果您在**中使用函数参数/参数。


谢谢。

答案 2 :(得分:0)

* args的单星号形式可以用作参数,以将非关键字的变长参数列表发送给函数,如下所示

randonumbs = [1,2,3,4]
somerando(*randonumbs)

** kwargs的双星号形式用于将关键字的变长参数字典传递给函数。

randonumbs = {'a':1, 'b':2, 'c': 3, 'd': 4}
somerando(**randonumbs)