查看Python函数的代码

时间:2010-10-25 12:56:40

标签: python introspection

假设我在Python shell中工作,我给了一个函数f。如何访问包含其源代码的字符串? (从shell开始,而不是手动打开代码文件。)

我希望这甚至可以用于其他函数中定义的lambda函数。

4 个答案:

答案 0 :(得分:9)

inspect.getsource
看起来getsource无法得到lambda的源代码。

答案 1 :(得分:8)

不一定是您要找的,但在ipython您可以这样做:

>>> function_name??

您将获得该函数的代码源(仅当它在文件中时)。所以这对lambda不起作用。但它绝对有用!

答案 2 :(得分:3)

也许这可以帮助(也可以得到lambda,但它很简单),

import linecache

def get_source(f):

    source = []
    first_line_num = f.func_code.co_firstlineno
    source_file = f.func_code.co_filename
    source.append(linecache.getline(source_file, first_line_num))

    source.append(linecache.getline(source_file, first_line_num + 1))
    i = 2

    # Here i just look until i don't find any indentation (simple processing).  
    while source[-1].startswith(' '):
        source.append(linecache.getline(source_file, first_line_num + i))
        i += 1

    return "\n".join(source[:-1])

答案 3 :(得分:0)

函数对象仅包含已编译的字节码,不保留源文本。检索源代码的唯一方法是读取它来自的脚本文件。

lambda没有什么特别之处:它们仍然具有f.func_code.co_firstlineco_filename属性,您可以使用它来检索源文件,只要lambda是在文件中定义的而不是交互式输入