如何获取python源文件的函数实例列表?

时间:2012-03-12 07:21:56

标签: python parsing compiler-construction abstract-syntax-tree

假设我有一个名为example.py的文件,其中包含以下内容:

def func_one(a):
    return 1

def func_two(b):
    return 2

def func_three(b):
    return 3

我如何获得该文件的函数实例列表?我曾尝试使用compilerparserast模块,但我无法弄明白。它可能比那更容易,但它略微超出我的深度。

编辑:要明确我不想导入这些功能。

4 个答案:

答案 0 :(得分:4)

您可以使用inspect模块:

>>> 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>)]

答案 1 :(得分:0)

您可以使用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']

答案 2 :(得分:0)

如果你真的不想像这样导入命名空间:

import examples
print dir(examples)

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

您可以openread该文件,搜索任何def并将其附加到列表中,从而返回所有函数和方法定义名称。

答案 3 :(得分:0)

你可以使用globals()函数,它返回一个dict,它具有你可以找到函数的所有全局环境。 例如:

d = globals().copy()
l = []
[l.append(k) for k in d if k.startswith('func')]