Подсчет количества вызовов функций для различных значений входных аргументов

1

С кодом

def myfunction():
    myfunction.counter += 1
myfunction.counter = 0

от qaru.site/questions/411836/... вы можете отслеживать количество вызовов функции.

Но как я могу отслеживать количество раз, когда функция вызывается, когда (один из) ее входных аргументов принимает определенное значение?

Так, например,

def myfunction(a):

    # Do some calculations...
    b = a**2

    # Increase counter for specific value of 'a'.
    myfunction.counter[a] += 1

    #  Return output argument.
    return b

myfunction.counter[5] = 0
myfunction.counter[79648763] = 0

print(myfunction.counter[5])
print(myfunction.counter[79648763])

myfunction(5)
myfunction(79648763)
myfunction(79648763)

print(myfunction.counter[5])  # Should return 1.
print(myfunction.counter[79648763])  # Should return 2.

Как мне изменить этот код, чтобы заставить его работать?

Теги:

1 ответ

1

Вы можете использовать dictionary для хранения этой информации:

    counter_dict={} #new line
    def myfunction(a):

        b = a**2

        if a in counter_dict.keys():
            counter_dict[a] = counter_dict[a]+1 #increment the previous value
        else:
            counter_dict[a] = 1 #if the value is not present then initialize it with 1

        return b

    myfunction(5)
    myfunction(79648763)
    myfunction(79648763)

    print(counter_dict[5])  # Should return 1.
    print(counter_dict[79648763])  # Should return 2.

Если вы не хотите использовать global dict вы можете написать следующее:

def myfunction(a):
    b = a**2
    if a in myfunction.my_dict.keys():
        myfunction.my_dict[a] = myfunction.my_dict[a]+1
    else:
        myfunction.my_dict[a] = 1

    return b

myfunction.my_dict={}
myfunction(5)
myfunction(79648763)
myfunction(79648763)

print(myfunction.my_dict[5])
print(myfunction.my_dict[79648763])
  • 1
    Тогда, пожалуйста, используйте второй код. Это будет работать :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню