爲什麼不只是讓python做到這一點?我認爲inspection
模塊可以打印出一個功能的來源,所以你可以導入模塊,選擇功能並檢查它。不掛斷。幫你解決方案...
好的。原來,inspect.getsource
功能交互方式定義的東西不起作用:
>>> def test(f):
... print 'arg:', f
...
>>> test(1)
arg: 1
>>> inspect.getsource(test)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\inspect.py", line 699, in getsource
lines, lnum = getsourcelines(object)
File "C:\Python27\lib\inspect.py", line 688, in getsourcelines
lines, lnum = findsource(object)
File "C:\Python27\lib\inspect.py", line 529, in findsource
raise IOError('source code not available')
IOError: source code not available
>>>
但對你的使用情況,它會工作:對於保存到磁盤模塊。就拿我test.py
文件:
def test(f):
print 'arg:', f
def other(f):
print 'other:', f
而且比較這個交互式會話:
>>> import inspect
>>> import test
>>> inspect.getsource(test.test)
"def test(f):\n print 'arg:', f\n"
>>> inspect.getsource(test.other)
"def other(f):\n print 'other:', f\n"
>>>
所以......你需要寫一個接受Python源文件名的簡單的Python腳本和一個函數/對象名稱作爲參數。然後它應該導入模塊並檢查功能並將其打印到STDOUT。
哇,真棒:)我可以確認它適用於我的真實世界功能。一個有趣的方面是,如果有兩個具有相同名稱的函數(如果它們處於不同的類中,可能會發生),它會從頭到尾返回它們兩個。不確定這是否是有意的(或者確實是什麼正確的行爲應該是) - 看起來是一個好的結果。 –
@SteveBennett:我只是在編輯修改該行爲。現在它應該只處理找到的第一個函數。 – Birei
我有點像「選擇所有具有相同名稱的函數」版本 - 否則我不知道如何訪問具有相同名稱的第二個函數。 –