Python 如何在整数列表中使用*args?

Python 如何在整数列表中使用*args?,python,variables,arguments,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) 一切都很好。代码起作用。 但我仍然需要修改代码来实现这一点。我不明白

我有一个用户整数列表:

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)
一切都很好。代码起作用。 但我仍然需要修改代码来实现这一点。我不明白怎么用这个

例如,用户在“我的代码”表中输入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)

但是我在计数行中遇到了一个错误。

def avg(*args)
意味着您的函数需要几个参数,但是调用
avg(pkt)
会将一个列表传递给函数。您需要使用
avg(*pkt)
解压该列表,以便将其内容单独传递给函数,或者当然将函数定义为
def avg(args)
,以便它接受列表作为其唯一参数。

我认为示例是展示
args
kwargs
的最佳方式。请注意以下事项:

def foo(*args):
打印(args)
傅(1,2,3)
产出:

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

def条(**kwargs):
印刷品(kwargs)
巴(a=1,b=2,c=3)
产出:

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

def foobar(*args,**kwargs):
打印('args',args)
打印('kwargs',kwargs)
foobar(1,2,3,d=4,e=5,f=6)
产出:

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

简而言之,
args
允许函数获取任何未命名变量,
kwargs
允许函数获取任何命名变量。然而,赋予它们这种特殊属性的不是名称
args
kwargs
,而是每个属性与
*
**
的明确定义:

def foo(*lol):
打印(lol)
傅(1,2,3)
产出:

(1, 2, 3)
{'a': 1, 'b': 2, 'c': 3}
args (1, 2, 3)
kwargs {'d': 4, 'e': 5, 'f': 6}
(1, 2, 3)
签出关于它们的Python文档


上述概念也适用于解包其他对象,例如
list
set
。注意:

print([1,2,3])#>>>[1,2,3]
在哪里

print(*[1,2,3])#>>13
上述操作相当于将三个单独的参数传递给
print
函数,因此与执行以下操作相同:

打印(1、2、3)

我想你想要的是
suma=0
而不是
sum=0
?实际上--
suma
最好不要破坏内置函数。您需要确定函数是接受单个列表还是接受数量不确定的单个参数。你不能两者兼得,那将是一笔总数。那么,如何从控制台使用*args函数呢?按照您定义函数的方式,您可以使用
avg(*pkt)
awesome来调用它!现在一切都清楚了!感谢您的解释和您的时间;)