Учитывая код python:
import sys
import os
def MyPythonMethod(value1, value2):
# defining some variables
a = 4
myValue = 15.65
listValues = [4, 67, 83, -23]
# check if a file exists
if ( os.path.exists('/home/hello/myfile.txt') ):
pass
# doing some operation on the list
listValues[0] = listValues[1]
# check if a file exists
print sys.path
# looping through the values
for i in listValues:
print i
Как я могу извлечь names
всех внешних методов в функции MyPythonMethod
?
В идеале я хотел бы получить список всех внешних методов/членов, которые вызывают.
Для MyPythonMethod
это вернет:
moduleNames = ["os", "sys"]
methodsInvoked = ["os.path.exists", "sys.path"]
(да, я знаю, что "путь" является членом sys
, а не методом, но я думаю, вы поняли, что это идея).
Любые идеи?
Вы никогда не сможете полностью узнать, какие функции (и в вашем случае мы говорим о простых функциях, а не методах), поскольку методы являются функциями-членами класса), функция будет вызывать без его синтаксического разбора, поскольку это может быть динамически, и их имена могут зависеть от того, что импортируется в глобальное пространство имен при вызове функции.
Но вы можете видеть имена модулей и функций, на которые ссылается функция, путем проверки MyPythonMethod.func_code.co_names
. В вашем случае этот атрибут вернет кортеж ('os', 'path', 'exists', 'sys')
.
func_code
? какую еще информацию он может дать по функции?
dir(MyPythonMethod.func_code)
и убедиться в этом сами. Вы можете получить имя переменных в функции, констант (литералов), определенных там, и так далее.
["os.path.exists", "sys.path"]
. Как решение поможет вам в этом?