假設我在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