回答
編輯:gc.get_referrers
存在,但不會告訴你它引用的函數對象來稱呼它,所以它不會幫你。另外,使用該函數時有一些注意事項,我不知道它是否可以在CPython以外的實現中使用。它不鼓勵在生產代碼中使用它。
最後一點,而常見問題可能不是有關是否可以確定物體的名稱完全正確的,其見解是否你應該是死的。
當˚F由DEF創建的,歸因於__name__同時被創建。該屬性被分配給該函數對象,並且無論您隨後將函數分配給哪個屬性,該屬性都會一直存在。
通常,一個對象不知道它指向哪個變量。
然而,我們確實有比使用實現特定的邏輯就像gc.get_referrers)工具(找一個對象的所有引用:
>>> def f(x):
return x**2
>>> g = f
>>> import gc
>>> gc.get_referrers(f)[0].keys()
['g', 'f', '__builtins__', '__package__', 'gc', '__name__', '__doc__']
另一種方法是掃描命名爲特定的所有實例對象:
>>> [key for key, value in globals().items() if value == f]
['g', 'f']
這個函數找到了所有的函數名稱,而不是像問題標題(或者我錯過了什麼?)中所述的那樣「在函數名稱的什麼名字下查找」。當然,可能對OP仍然有用。 – weronika 2012-04-03 20:28:45
您可以通過使用inspect
檢查模塊的源代碼做,然後才用一些限制(最起碼,你需要能夠獲得行的地方提及的名稱)。
你絕對不應該這樣做,除非你真的知道你爲什麼需要它。
a = 1
b = 1
c = 1
1的名字是什麼?這個問題甚至有意義嗎?
功能是像任何其他對象,諸如1
或"cats"
。它有一個__name__
屬性,它告訴你什麼名字它最初被定義爲,但其他的名字可以被分配給它,並沒有記錄保存這些分配的對象。
您可以搜索所有本地和全局變量,但不會找到所有可能的引用;對函數的引用可以在容器中保存,如字典或列表,作爲對象屬性,作爲其他模塊中的全局變量,以及其他我現在沒有想到的地方。哦!閉包。不過,這是要點:
def f():
pass
g = f
allvars = dict(globals())
allvars.update(locals())
funcnames = [key for (key, value) in allvars.iteritems() if value is f]
# returns ['g', 'f']
- 1. 確定在Chrome中調用了哪些javascript函數
- 2. 的jQuery確定哪些元素調用函數
- 3. jQuery的:確定從哪個<tr>函數被調用
- 4. 確定哪些函數在代碼中
- 5. 確定哪些表被鎖定
- 6. 確定哪些元素調用事件
- 7. 我如何控制哪些函數被調用,使用模板
- 8. 確定通用函數調用哪個函數
- 9. 確定哪些按鈕被點擊
- 10. 確定哪些頁面被打印
- 11. 如何找出哪些函數被調用?
- 12. 關於哪些函數被調用的Javascript命令
- 13. 如何找出什麼類被調用了哪些函數?
- 14. 使用反射來確定哪個基類構造函數被調用
- 15. 哪個函數被InvokeHelper調用
- 16. 爲什麼有些函數被調用
- 17. 找出哪些函數被內聯
- 18. 如何確定哪些第三方Flash對象調用Javascript函數?
- 19. 如何確定哪些函數調用在Python中引發異常?
- 20. 確定函數的哪些部分未被單元測試覆蓋
- 21. JavaScript函數調用說不確定,但功能被定義
- 22. JavaScript函數沒有被調用正確
- 23. 函數'didFinishLaunchingWithOptions'被不正確地調用
- 24. 根據小數長度確定調用哪個函數
- 25. C++編譯器如何決定調用哪些函數?
- 26. 如何確定哪個Windows DLL用於函數調用?
- 27. 使用循環來確定要調用哪個函數
- 28. 確定在Rails應用中哪些寶石沒有被使用
- 29. typeid的問題,以確定哪些數據被處理
- 30. 表訪問vs函數調用+條件確定:哪個更快?
無論是否存在解決方案,您爲什麼首先需要這個解決方案? – SingleNegationElimination 2012-04-03 19:56:36
簡答:你不能。 – 2012-04-03 19:56:52
我也認爲你不能 – pylover 2012-04-03 20:00:00