Pat*_* Li 3 python average function
我是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
Run Code Online (Sandbox Code Playgroud)
但是如果参数是数字列表,则此函数将不起作用.例如,
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'
Run Code Online (Sandbox Code Playgroud)
我知道NumPy有一个函数numpy.mean,它将列表作为参数,但不是数字向量my_mean.
我想知道是否有办法my_mean在这两种情况下都能开展工作?所以:
my_mean(1, 2, 3)
2.0
my_mean([1, 2, 3])
2.0
Run Code Online (Sandbox Code Playgroud)
就像min或max功能?
您可以使用以下*arg语法传递列表:
my_mean(*[1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
或者,您可以检测传入的第一个参数是否是序列并使用它而不是整个args元组:
import collections
def my_mean(*args):
if not args:
return None
if len(args) == 1 and isinstance(args[0], collections.Container):
args = args[0]
total = sum(args)
ave = 1.0 * total / len(args)
return ave
Run Code Online (Sandbox Code Playgroud)