我有一个用户整数列表:
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)
但是我在计数行中出现了错误。
答案 0 :(得分:2)
我认为示例是展示args
和kwargs
的最好方法。请注意以下几点:
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
允许函数使用任何命名的变量。但是,不是名称args
和kwargs
赋予了它们特殊的属性,而是使用*
和**
对它们进行显式定义:
def foo(*lol):
print(lol)
foo(1, 2, 3)
输出:
(1, 2, 3)
查看有关here的Python文档。
以上概念也可用于解包其他对象,例如list
和set
。注意:
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)
,以便它接受列表作为其唯一参数。