假设我在Python shell中工作,我给了一个函数f
。如何访问包含其源代码的字符串? (从shell开始,而不是手动打开代码文件。)
我希望这甚至可以用于其他函数中定义的lambda函数。
答案 0 :(得分:9)
inspect.getsource
看起来getsource无法得到lambda的源代码。
答案 1 :(得分:8)
答案 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_firstline
和co_filename
属性,您可以使用它来检索源文件,只要lambda是在文件中定义的而不是交互式输入