Как использовать * args со списком целых? - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть список пользовательских целых чисел:

user1 = [4,5,2,3,4]
user2 = [4,2,1,3,4,4,2]

Я хочу использовать * args для подсчета ср.

def avg(*args):
  sum=0
  for num in avg:
     sum =+ num
  result = sum/len(avg)
  return result

И если я назову это так:

avg(4,5,2,3,4)
avg(4,2,1,3,4,4,2)

все в порядке. Код работает. Но мне все еще нужно изменить код, чтобы сделать это. Я не понимаю, как использовать это * args.

Например, пользователь положил 3 int в таблицу, мой код делает что-то вроде этого:

avg(userTable) // and just put a 3 args in fun

Может кто-нибудь объяснить мне, как я могу сделай это? Мне нужно использовать переменные аргументы для теста.

Одна из моих попыток:

pkt = [44,23,0,22]
def avg(*pkt):
    suma = 0
    count = len(pkt)
    for i in range(len(pkt)):
        if pkt[i] != 0:
            print(i)
            sum = sum + pkt[i]
        else:
            count = count - 1
    result= pkt[0] + pkt[1] + sum
    result= result/(count+2)
    print(result)
    return result


avg(pkt)

, но я получил ошибку в строке счета.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2020

Я думаю, что пример - лучший способ продемонстрировать args и kwargs. Обратите внимание на следующее:

def foo(*args):
    print(args)

foo(1, 2, 3)

выходы:

(1, 2, 3)

def bar(**kwargs):
    print(kwargs)

bar(a=1, b=2, c=3)

выходы:

{'a': 1, 'b': 2, 'c': 3}

def foobar(*args, **kwargs):
    print('args', args)
    print('kwargs', kwargs)

foobar(1, 2, 3, d=4, e=5, f=6)

выходы:

args (1, 2, 3)
kwargs {'d': 4, 'e': 5, 'f': 6}

Короче говоря, args позволяет функциям принимать любые безымянные переменные, а kwargs позволяет функциям принимать любые именованные переменные. Однако, это не имя args и kwargs, которое наделяет их этим специальным свойством, а точное определение каждого из них с * и **:

def foo(*lol):
    print(lol)

foo(1, 2, 3)

output:

(1, 2, 3)

Ознакомьтесь с Python документацией по ним здесь .


Приведенная выше концепция также работает для распаковки других объектов, таких как list и set. Примечание:

print([1, 2, 3])  # >>> [1, 2, 3]

, где

print(*[1, 2, 3]) # >>> 1 2 3

Выше приведен эквивалент передачи трех отдельных аргументов в функцию print, поэтому это то же самое, что и:

print(1, 2, 3)
1 голос
/ 01 февраля 2020

def avg(*args) означает, что ваша функция принимает несколько аргументов, но вызов avg(pkt) передает список в функцию. Вам необходимо распаковать этот список с помощью avg(*pkt), чтобы его содержимое передавалось функции по отдельности - или, конечно, определить функцию как def avg(args), чтобы она принимала список в качестве единственного аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...