查看Python函数的代码

13 投票
4 回答
8724 浏览
提问于 2025-04-16 06:03

假设我在Python的命令行界面里,给了我一个函数f。我该怎么获取这个函数的源代码字符串呢?(是在命令行里获取,而不是手动打开代码文件。)

我希望这个方法也能适用于在其他函数内部定义的lambda函数。

4 个回答

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

这可能不是你想要的答案,但在 ipython 中,你可以这样做:

>>> function_name??

这样你就能看到这个函数的代码来源(前提是它在一个文件里)。所以对于 lambda 函数来说,这个方法是行不通的。不过,这个功能确实很有用!

9

inspect.getsource
看起来,getsource这个功能无法获取lambda表达式的源代码。

撰写回答