假设我在Python shell中工作,并且我得到一个函数f
。我如何访问包含其源代码的字符串? (从shell,而不是通过手动打开代码文件。)查看Python函数的代码
我希望这工作,即使在其他函数内定义的lambda函数。
假设我在Python shell中工作,并且我得到一个函数f
。我如何访问包含其源代码的字符串? (从shell,而不是通过手动打开代码文件。)查看Python函数的代码
我希望这工作,即使在其他函数内定义的lambda函数。
inspect.getsource
看起来getsource不能得到lambda的源代码。
是的,不幸的是,只有它可以打开源代码存在的文件才有效。你可以做的一件事是看看lambda正在做什么,使用dis来分离字节码。 – dcolish 2010-11-01 16:45:17
函数对象只包含编译的字节码,源文本不保留。检索源代码的唯一方法是读取它来自的脚本文件。
没有什么特别之处,虽然lambda表达式:他们仍然有f.func_code.co_firstline
和co_filename
属性,它可以用来检索源文件,只要拉姆达是在一个文件中定义的,而不是交互式输入。
函数的编译字节码可以用'dis.dis'查看。 – adw 2010-10-25 16:29:49
也许这能帮助(也可以得到拉姆达但它是非常简单),
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])
复制所有这些的:http://stackoverflow.com/search?q=%5Bpython%5D+view+来源 – 2010-10-25 13:36:55