Полагаю, вы хотите провести статический анализ кода.Сколько местоположений в вашем коде вызывают функцию.
Это очень трудно сделать в динамических языках, таких как python, потому что существует множество способов вызова функций иначе, чем по собственному имени,и даже компилятор байт-кода python не всегда будет знать, какая функция будет вызываться в каком-либо месте, и он может даже измениться во время выполнения.И есть также стандартный ОО-полиморфизм.
Учтите:
def doublefx(f, x):
return f(x)*2
print doublefx(math.sqrt, 9) # 6
f = stdin.readline()
print doublefx(getattr(math, f), 9) # ?
Ни при каких условиях инструмент статического анализа не будет выяснять, какие функции в математике. * Будут вызываться этим кодом.Даже первый пример будет очень трудно рассуждать, второй - невозможен.
Следующий инструмент выполняет некоторый статический анализ сложности.
Другие инструменты анализа, такие как PyLint и PyChecker, скорее фокусируются на стиле и возможных ошибках.