Анализировать внешние вызовы методов внутри функции Python?

1

Учитывая код 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, а не методом, но я думаю, вы поняли, что это идея).

Любые идеи?

  • 0
    Я хотел бы найти такие вещи, как ["os.path.exists", "sys.path"] . Как решение поможет вам в этом?
  • 0
    @ user540009: Вы говорите, что фраза «все внешние методы» действительно означает «функции, определенные вне моего кода»? Это то, что вы ищете?
Теги:

1 ответ

1
Лучший ответ

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

Но вы можете видеть имена модулей и функций, на которые ссылается функция, путем проверки MyPythonMethod.func_code.co_names. В вашем случае этот атрибут вернет кортеж ('os', 'path', 'exists', 'sys').

  • 0
    Спасибо, Вооз. Можете ли вы сказать мне, что еще можно получить с помощью func_code ? какую еще информацию он может дать по функции?
  • 0
    Вы можете попробовать dir(MyPythonMethod.func_code) и убедиться в этом сами. Вы можете получить имя переменных в функции, констант (литералов), определенных там, и так далее.
Показать ещё 1 комментарий

Ещё вопросы

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