Как получить список экземпляров функций для исходного файла Python? - PullRequest
0 голосов
/ 12 марта 2012

Допустим, у меня есть файл с именем example.py со следующим содержимым:

def func_one(a):
    return 1

def func_two(b):
    return 2

def func_three(b):
    return 3

Как получить список экземпляров функций для этого файла?Я пытался играть с модулями compiler, parser и ast, но я не могу понять это.Это может быть намного проще, но это немного не в моей глубине.

РЕДАКТИРОВАТЬ: Чтобы было ясно, я не хочу импортировать функции.

Ответы [ 4 ]

4 голосов
/ 12 марта 2012

Вы можете использовать проверить модуль:

>>> import inspect
>>> import example
>>> inspect.getmembers(example, inspect.isroutine)
[('func_one', <function func_one at 0x0238CBB0>), ('func_three', <functi
three at 0x0240ADB0>), ('func_two', <function func_two at 0x0240ADF0>)]
0 голосов
/ 12 марта 2012

Вы можете использовать функцию globals (), она возвращает диктат для всей глобальной среды, в которой вы можете найти свои функции. Пример:

d = globals().copy()
l = []
[l.append(k) for k in d if k.startswith('func')]
0 голосов
/ 12 марта 2012

Если вы действительно не хотите импортировать в пространство имен следующим образом:

import examples
print dir(examples)

['__builtins__', '__doc__', '__file__', '__name__', 
'__package__', 'func_one', 'func_three', 'func_two'] #OUTPUT

Вы можете open и read файл, выполнив поиск любых def s и добавивв список, возвращая имена всех функций и определений методов.

0 голосов
/ 12 марта 2012

Вы можете использовать dir .Это возвращает список имен в текущей локальной области.Хотя это может вернуть больше, чем имена функций.

>>> import utils
>>> utils.__name__
'utils'
>>> dir(utils)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'human_number', 'islice', 'math', 'prime_factors', 'primes_sieve', 'primes_sieve1', 'proper_divisors', 'pyth_triplet', 'square_of_sum', 'sum_of_nums', 'sum_of_squares', 'test', 'triangle_nums', 'window']
...