我是一个新手,不太懂Python,请谅解我的问题。
我想写一个函数,它可以接收一组数字,并计算它们的平均值。所以我写了一个小函数:
def my_mean(*args):
if len(args) == 0:
return None
else:
total = sum(args)
ave = 1.0 * total / len(args)
return ave
my_mean(1, 2, 3)
2.0
但如果参数是一组数字,此函数将无法正常工作。例如,
my_mean([1, 2, 3])
Traceback (most recent call last):
File "/usr/lib/wingide-101-4.1/src/debug/tserver/_sandbox.py", line 1, in <module>
# Used internally for debug sandbox under external interpreter
File "/usr/lib/wingide-101-4.1/src/debug/tserver/_sandbox.py", line 21, in my_mean
TypeError: unsupported operand type(s) for +: 'int' and 'list'
我知道NumPy
有一个函数numpy.mean
,它以列表作为参数,但不像my_mean
一样接受数字向量。
我想知道是否有办法使my_mean
在这两种情况下都能工作?所以:
my_mean(1, 2, 3)
2.0
my_mean([1, 2, 3])
2.0
就像min
或者max
函数一样吗?
my_mean(1, 2, 3)
,Python会收集所有参数并将它们作为列表传递给args
,所以在函数中args
是一个包含[1, 2, 3]
的列表。我不理解为什么要添加一个*
到my_mean(*[1, 2, 3])
中。您能否再详细解释一下?我在我的书(一本非常入门的书)中找不到这个内容。 - JACKY88