Использование Iterable и числа в качестве входных данных в функции в Python - PullRequest
0 голосов
/ 12 ноября 2018

Я написал среднюю функцию в 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' объект неитерация.Не могли бы вы помочь мне определить, что я делаю неправильно в функции mean_new.Функция mean_new должна работать как с числовым, так и с многократным вводом.

1 Ответ

0 голосов
/ 12 ноября 2018

Чтобы проверить, является ли объект итеративным, вы действительно можете использовать iter(object), но не как условие в операторе if, а в блоке try, так как iter() вызовет исключение 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
...