때로는 디버그 출력을 인쇄하는 기능이 주위에 흩어져 있습니다.디버그 인쇄 끄기
def f(debug=False):
print = __builtins__.print if debug else lambda *p: None
을 아니면 내가 디버그 메시지에서 떨어져 뭔가를 인쇄해야하는 경우, 내가 디버그 메시지에 대한 dprint
함수를 만들 : 이와 내가 와서이 디버그 출력을 전환합니다.
debug=False
일 때이 print
문은 코드가 상당히 느려지므로 lambda *p: None
이 여전히 호출되며 함수 호출이 느린 것으로 알려져 있습니다.
그래서, 내 질문은 : 그 코드의 성능에 영향을 미치지 않도록 효율적으로 모든 디버그 인쇄를 비활성화 할 수있는 더 좋은 방법이 있나요?
모든 답변은 내 logging
모듈을 사용하지 않는 것에 관한 것입니다. 이 통지에 좋은이지만,이 상당히 코드를 느리게 함수 호출 방지하는 방법을 질문 대답하지 않는다 - 통해 멀리 기능 코드 객체 땜질하여 가능하다면 (예를 들어, (내 경우에는 25 번 모든 줄은 print
진술 또는 다른 방법으로)). 이 답변에서 제시하는 것보다 print
을 logging.debug
으로 바꾸는 것이 더 느려야합니다. 그리고이 질문은 그러한 함수 호출을 완전히 없애는 것에 관한 것입니다.
lambda *p: None
대신 logging
을 사용해 보았는데 놀랄 일도 아니고 코드도 더 느려졌습니다. 이러한 인쇄는 25 침체 원인이 어디에
아마 누군가가 코드를보고 싶다 : http://ideone.com/n5PGu
을 그리고 logging
모듈에 대한 아무것도하지 않습니다. 항상 hacks 없이는 강력한 솔루션을 고수하는 것이 좋습니다. 그러나 내가 해킹을 20 줄짜리 일회성 코드 스 니펫에 사용하면 범죄는 없다고 생각합니다.
제한 등
하지,하지만 제안으로, 어쩌면 기능 소스 코드의 일부 라인 (예를 들어 print
로 시작)을 삭제하고 다시 컴파일 할 수있어? 나는 아래의 답에이 접근법을 제시했다. 이 솔루션에 대한 의견을 듣고 싶지만이 문제를 해결하는 다른 방법을 환영합니다.
비록 내가 당신의 함수를 사용하지 않는다고하더라도 :'lambda'를 사용하면, 호출 될 때마다 새로운 함수 객체가있게 될 것입니다. 따라서 빈 함수를 대신 사용하면 코드 속도가 느려지지 않을 것입니다. – devsnd
@twall 한 번만 호출됩니다. – ovgolovin