【问题标题】:Functions and arguments in PythonPython 中的函数和参数
【发布时间】:2013-11-12 18:11:36
【问题描述】:

我正在尝试构建一个函数来计算给定数字的平均值。数字可以是元组格式:(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__'

为什么会这样?

【问题讨论】:

  • variable[x] 用于属性访问,而variable(x) 用于函数调用。对于您的第二种情况,您需要get_mean([1,2,3])
  • get_mean[...] 是解释列表索引,而 get_mean 不是列表,它是一个函数。第一步尝试 get_mean([1,2,3])
  • 但是函数的定义是正确的,嗯?

标签: python list python-2.7 arguments tuples


【解决方案1】:

你传递的参数语法错误,你错过了括号

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

【讨论】:

  • 好的,谢谢指正。我按照你说的做了,并且成功了。仍然是新手,但正在学习,哈哈:)
【解决方案2】:

我可能在这里遗漏了一些东西,但是您是否有理由不只是将数据作为元组或列表传递,例如

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)

from __future__ import division 是在你使用 python 2.x 时自动将整数转换为浮点数进行除法(在 python 3.x 中自动完成)

【讨论】:

  • -1 有什么特殊原因吗?
  • 不是我。 (实际上还不能投票,大声笑!)我选择了第一个解决方案并且做对了。也可能是这与其他解决方案一样好。不过没测试。还是谢谢!
  • 如果有更新的版本如 3.x,你认为为什么人们仍然使用 python 2.7?
  • @Waldema Python 2.7 仍在广泛使用。部分原因是一些第三方库仅适用于此(现在可能不太常见),部分原因是很多人还没有来得及切换。 Python 2 中的一些命令需要为 python 3 重写。
  • 好的,我明白了。有人告诉我从 2.7 开始。但我正在考虑切换到 3.x。
猜你喜欢
  • 2013-02-04
  • 1970-01-01
  • 2017-12-17
  • 2017-07-02
  • 2018-01-04
  • 2018-01-17
  • 2019-10-26
  • 1970-01-01
  • 2022-08-04
相关资源
最近更新 更多