답변
이 문제 중 하나는 파이썬의 함수가 1 급 개체라는 것입니다. 따라서 그들의 이름을 재 지정할 수 있습니다. 예를 들어 :
def myfunc():
pass
a = myfunc
myfunc = 42
a()
우리는 또한 폐쇄 함수가 다른 함수에 의해 반환하고 원래 이름이 범위를 벗어나있다을 보유하고 있습니다.
불행히도 기존 이름과 같은 이름의 함수를 정의하는 것은 매우 합법적입니다. 예를 들어 : - id
재사용 얻을 수 있기 때문에 즉, 폐쇄에 도움이되지 않습니다하지만
def myfunc(): # <<< This code is never called
pass
def myfunc():
pass
myfunc()
그래서 어떤 추적 기능의 id
, 단지 이름을 포함해야합니다. 함수의 __name__
속성을 다시 할당해도 도움이되지 않습니다.
데코레이터를 사용하여 함수 호출을 추적 할 수 있습니다. 여기에 나는 이름과 id
을 사용했습니다. id
은 독자적으로 읽을 수 없습니다.
{'myfunc1 (4339565296)': 2, 'myfunc1 (4339565704)': 1}
을하지만에만 호출 된 기능을하지하지 않은 자들을 제공합니다
import functools
globalDict = {}
def tracecall(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
global globalDict
key = "%s (%d)" % (f.__name__, id(f))
# Count the number of calls
if key in globalDict:
globalDict[key] += 1
else:
globalDict[key] = 1
return f(*args, **kwargs)
return wrapper
@tracecall
def myfunc1():
pass
myfunc1()
myfunc1()
@tracecall
def myfunc1():
pass
a = myfunc1
myfunc1 = 42
a()
print(globalDict)
을 제공합니다!
여기에서 어디로 가야합니까? 파이썬의 역동적 인 특성을 감안할 때 작업이 매우 어렵다는 것을 알기를 바랍니다. 그러나 위의 데코레이터가 최소한 코드가 사용되는 방식을 진단 할 수 있기를 바랍니다.
없음을 것을 감지하지 않으며 문제가되지 않습니다. 파이썬은 이것을 감지하지 못합니다. 실행 중에 어떤 함수가 호출되는지 여부를 감지하려면 프로그램에서 전역 집합을 사용할 수 있습니다. 각 함수 안에는 설정할 함수 이름을 추가하십시오. 나중에 설정 한 내용을 인쇄하여 해당 기능이 호출되는지 여부를 확인할 수 있습니다.
거짓. 이 작업의 어려움과 오버 헤드를 무시하면 유용 할 이유가 없습니다.
모듈에서 정의되었지만 해당 모듈의 다른 곳에서 호출되지 않은 함수가 다른 모듈에서 호출 될 수 있으므로 경고를받을 자격이 없습니다.
파이썬이 프로그램 과정에서 실행되는 모든 모듈을 분석하고 호출되지 않은 함수에 대한 경고를 인쇄하는 경우이 특정 실행의 입력으로 인해 함수가 호출되지 않았을 수 있습니다. 아마도 계산기 프로그램에서 "곱하기"함수가 있지만 사용자는 일부 숫자를 합산하라는 요청을했을뿐입니다.
파이썬이 프로그램을 구성하는 모든 모듈을 분석하고 호출 할 수없는 함수에 대한 경고를 인쇄한다면 (이것은 불가능하지만 여기 나와 함께 있어야 함) 의도 한 기능에 대해 경고합니다 다른 프로그램에서 사용하십시오. 예 : 계산기 프로그램이 두 개 있고 단순한 프로그램과 고급 프로그램이있는 경우 calc.py
유틸리티 함수가있는 경우 exp
과 log
과 같은 고급 함수를 간단한 프로그램의 일부로 사용하면 호출 할 수 없지만 그럴 수는 없습니다. 고급 프로그램에 필요하기 때문에 경고가 표시됩니다.
- 1. 잡히지 않은 ReferenceError : 함수가 정의되지 않았습니다. 함수가 정의되어 있지만, jQuery
- 2. 함수가 호출되지 않았습니까?
- 3. 일부 함수가 최적화되지 않은 경우 해당 함수가 선언 된 모든 함수가 최적화되지 않았 음을 의미합니까?
- 4. Office.initialize 함수가 호출되지 않았습니다
- 5. onsubmit 함수가 호출되지 않았습니다.
- 6. 왜 addcallback 함수가 정의되지 않았 음을 말하는 javascript가 있습니까?
- 7. JavaScript 함수가 호출되지 않습니다.
- 8. jQuery 함수가 정의되지 않았지만 콘솔에서 함수가 작동합니다.
- 9. 함수가 호출되지 않습니다.
- 10. Ajax 함수가 호출되지 않음
- 11. 오류가있는 경우 firebase 콜백 함수가 호출되지 않습니다.
- 12. 함수가 호출되지 않았습니다.
- 13. 왜 함수가 호출되지 않습니까?
- 14. 콜백 함수가 호출되지 않습니다.
- 15. 링크 함수가 호출되지 않습니다
- 16. setTimeout 함수가 호출되지 않았습니까?
- 17. JNI 함수가 호출되지 않습니다.
- 18. 함수가 backbone.js에서 호출되지 않습니다.
- 19. 왜 함수가 호출되지 않습니까?
- 20. ManagedBean 함수가 호출되지 않음
- 21. detoured 함수가 호출되지 않습니다
- 22. Ajax 함수가 호출되지 않았습니다.
- 23. angular : 함수가 호출되지 않습니다.
- 24. phonegap : 함수가 호출되지 않습니다.
- 25. AngularJS 함수가 호출되지 않음
- 26. 함수가 호출되지 않습니까?
- 27. 함수가 호출되지 않습니다.
- 28. JavaScript 함수가 호출되지 않습니다.
- 29. JS 함수가 호출되지 않습니까?
- 30. NSTimer 함수가 호출되지
시도해 보셨습니까? :) – Cleb
파이썬 자체가이를 감지하지 못합니다. 일부 IDE는 사용되지 않는 코드를 감지 할 수 있습니다. –