创建一个将列表或整数作为参数的函数 (Python)

sfo*_*r12 3 python function list python-2.7

我正在尝试创建一个函数,该函数将数字列表或整数的平均值作为变量。到目前为止,我有:

def average(*args):
    if type(args) is list:
        for x in args:
            print sum(x) / float(len(x))
    else:
        for x in args:
            args = list(args)
            print sum(x) / float(len(x))
Run Code Online (Sandbox Code Playgroud)

当我输入一个列表时,比如

average([1, 3, 5, 2])
Run Code Online (Sandbox Code Playgroud)

它很好用。但是当我进入

average(1, 3, 5, 2)
Run Code Online (Sandbox Code Playgroud)

它给出了“TypeError:'int'对象不可迭代”。我检查了其他问题,但似乎没有一个解决方案有效。我试图检查它是否是一个带有 type() 和 isinstance() 的列表,但是每当我让其中一个工作时,另一个就会抛出错误。

Pad*_*ham 5

args 是一个元组,所以检查是否args[0]是一个列表,内容的总和args[0],如果只是 ints 只是在 sum args 中传递:

def average(*args):
    if isinstance(args[0],list):
        print(sum(args[0]) / float(len(args[0])))
    else:
        print (sum(args) / float(len(args)))


In [2]: average(1, 3, 5, 2)
2.75

In [3]: average([1, 3, 5, 2])
2.75
Run Code Online (Sandbox Code Playgroud)

如果要接受元组,请使用collections.Iterable

from collections import Iterable
def average(*args):
    if isinstance(args[0],Iterable):
        print(sum(args[0]) / float(len(args[0])))
    else:
        print (sum(args) / float(len(args)))

In [5]: average([1, 3, 5, 2])
2.75

In [6]: average(1, 3, 5, 2)
2.75

In [7]: average((1, 3, 5, 2))
2.75
Run Code Online (Sandbox Code Playgroud)