def adder1(*args):                  # Suma dowolnej liczby argumentów pozycyjnych
    tot = args[0]                   # To samo co w ćwiczeniu 3., dla porównania i ponownego użycia
    for arg in args[1:]:
        tot += arg
    return tot

def adder2(**args):                 # Suma dowolnej liczby argumentów ze słowami kluczowymi
    argskeys = list(args.keys())    # Wywołanie list() konieczne do indeksowania!
    tot = args[argskeys[0]]
    for key in argskeys[1:]:
        tot += args[key]
    return tot

def adder3(**args):                 # To samo, ale przekształcenie na listę wartości
    args = list(args.values())      # Wywołanie list() konieczne do indeksowania!
    tot = args[0]
    for arg in args[1:]:
        tot += arg
    return tot

def adder4(**args):                 # To samo, ale z ponownym użyciem wersji z argumentami pozycyjnymi
    return adder1(*args.values())

print(adder1(1, 2, 3),       adder1('aa', 'bb', 'cc'))
print(adder2(a=1, b=2, c=3), adder2(a='aa', b='bb', c='cc'))
print(adder3(a=1, b=2, c=3), adder3(a='aa', b='bb', c='cc'))
print(adder4(a=1, b=2, c=3), adder4(a='aa', b='bb', c='cc'))

