如何将* args与int列表一起使用?

时间:2020-02-01 03:42:13

标签: python variables arguments

我有一个用户整数列表:

user1 = [4,5,2,3,4]
user2 = [4,2,1,3,4,4,2]

我想使用* args来计算平均值。

def avg(*args):
  sum=0
  for num in avg:
     sum =+ num
  result = sum/len(avg)
  return result

如果我这样称呼它:

avg(4,5,2,3,4)
avg(4,2,1,3,4,4,2)

一切都很好。代码有效。 但是我仍然需要更改代码来做到这一点。我不明白该如何使用* args。

例如,用户将3 int放在表中,我的代码执行以下操作:

avg(userTable) // and just put a 3 args in fun

有人可以解释我该怎么做吗?我需要使用可变参数作为基准。

我的尝试之一:

pkt = [44,23,0,22]
def avg(*pkt):
    suma = 0
    count = len(pkt)
    for i in range(len(pkt)):
        if pkt[i] != 0:
            print(i)
            sum = sum + pkt[i]
        else:
            count = count - 1
    result= pkt[0] + pkt[1] + sum
    result= result/(count+2)
    print(result)
    return result


avg(pkt)

但是我在计数行中出现了错误。

2 个答案:

答案 0 :(得分:2)

我认为示例是展示argskwargs的最好方法。请注意以下几点:

def foo(*args):
    print(args)

foo(1, 2, 3)

输出:

(1, 2, 3)

def bar(**kwargs):
    print(kwargs)

bar(a=1, b=2, c=3)

输出:

{'a': 1, 'b': 2, 'c': 3}

def foobar(*args, **kwargs):
    print('args', args)
    print('kwargs', kwargs)

foobar(1, 2, 3, d=4, e=5, f=6)

输出:

args (1, 2, 3)
kwargs {'d': 4, 'e': 5, 'f': 6}

简而言之,args允许函数使用任何未命名的变量,kwargs允许函数使用任何命名的变量。但是,不是名称argskwargs赋予了它们特殊的属性,而是使用***对它们进行显式定义:

def foo(*lol):
    print(lol)

foo(1, 2, 3)

输出:

(1, 2, 3)

查看有关here的Python文档。


以上概念也可用于解包其他对象,例如listset。注意:

print([1, 2, 3])  # >>> [1, 2, 3]

其中

print(*[1, 2, 3]) # >>> 1 2 3

以上等同于将三个单独的参数传递给print函数,因此与执行此操作相同:

print(1, 2, 3)

答案 1 :(得分:1)

def avg(*args)表示您的函数带有多个参数,但是调用avg(pkt)会将 list 传递给该函数。您需要使用avg(*pkt)解压缩该列表,以便将其内容分别传递给函数-或将函数定义为def avg(args),以便它接受列表作为其唯一参数。