我正在尝试构建一个能够计算给定数字平均值的函数。数字可以采用元组格式:(1, 2, 3)
或列表格式:[1, 2, 3]
。
现在我想出了这个:
def get_mean(*arg):
for x in arg: ### Calculating sum
sum = float(sum) + x
count = len(arg)
mean = float(sum) / int(count)
return mean
然后,如果我尝试使用以下属性调用此函数:
print get_mean(1, 2, 3)
输出将是:2.0
但那时:
print get_mean[1, 2, 3]
输出错误:TypeError: 'function' object has no attribute '__getitem__'
为什么会这样?
答案 0 :(得分:3)
您使用错误的语法传递参数,您错过了括号:
print get_mean[1, 2, 3]
但是,如果您使用此项,则会遇到TypeError: unsupported operand type(s) for +: 'float' and 'list'
,因为args
为[[1, 2, 3]]
:
print get_mean([1, 2, 3])
因此您需要解压缩列表,因此只需使用*
运算符
print get_mean(1, 2, 3)
print get_mean(*[1, 2, 3])
#2.0
#2.0
答案 1 :(得分:-1)
我可能在这里遗漏了一些东西,但是有一个原因让你不只是将数据作为元组或列表传递,例如。
from __future__ import division
def get_mean(nos):
return sum(nos) / len(nos)
#test
t = (1, 2, 3, 4)
print get_mean(t)
l = [1, 2, 3, 4]
print get_mean(l)
如果您使用python 2.x(在python 3.x中自动完成),from __future__ import division
将自动将整数转换为浮点数进行除法