在 python 的函数中使用 Iterable 和 numeric 作为输入

Using Iterable and numeric as input in a function in python

我在 python

中写了一个均值函数
    def mean(*args):
        numbers = args
        sm=0
        length = len(numbers)
        if length>0:
            for num in numbers:
                sm = sm+num
            return sm/length  
        else:
            return 'FAIL'

它可以很好地处理数值。现在我想修改它,让它也接受输入中的迭代。

修改函数:

    def mean_new(*args):
        numbers = args
        sm=0
        count=0
        for num in numbers:
            if iter(num):
                data = list(num)
                sm += sum(data)
                count+=len(data)
            else:
                sm = sm+num
                count+=1
    return sm/count

mean_new 函数不工作并给我一个错误 'int' object is not iterable。你能帮我找出我在 mean_new 函数中做错了什么吗? mean_new 函数应该适用于数字和可迭代输入。

要检查对象是否可迭代,您确实可以使用 iter(object),但不能作为 if 语句中的条件,而是在 try 块中,因为 [=如果对象不可迭代,14=] 将引发 TypeError 异常。但是,由于您丢弃了 iter() 返回的迭代器,而是使用 list() 构造函数将可迭代对象转换为列表,因此您可以简单地将 try 块放在 list() 而不是:

for num in numbers:
    try:
        data = list(num)
        sm += sum(data)
        count += len(data)
    except TypeError:
        sm = sm + num
        count += 1