代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

查看Python函数的代码[复制]

  •  13
  • Ram Rachum  · 技术社区  · 14 年前

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

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

    4 回复  |  直到 14 年前
        1
  •  9
  •   sunqiang    14 年前

    inspect.getsource
    看来get source无法获取lambda的源代码。

        2
  •  8
  •   Etienne    14 年前

    不一定是你要找的,但是 ipython 你可以:

    >>> function_name??
    

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

        3
  •  3
  •   mouad    14 年前

    也许这能帮上忙(也能得到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])
    
        4
  •  0
  •   bobince    14 年前

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

    不过,兰姆达斯没有什么特别之处:他们仍然有一个 f.func_code.co_firstline co_filename 属性,只要lambda是在文件中定义的而不是交互输入,就可以使用该属性检索源文件。