Wyłączanie wydruków debugowania

Czasami mam wiele wydruków rozproszonych wokół funkcji, aby wydrukować wynik debugowania. Aby przełączyć te wyniki debugowania, wymyśliłem to:

def f(debug=False): 
    print = __builtins__.print if debug else lambda *p: None

Lub jeśli muszę wydrukować coś poza wiadomością debugowania, tworzędprint funkcja dla komunikatów debugowania.

Problem polega na tym, kiedydebug=False, toprint instrukcje znacznie spowalniają kod, ponieważlambda *p: None jest nadal wywoływane, a wywołanie funkcji jest znane.

Tak więc moje pytanie brzmi: czy istnieje lepszy sposób na skuteczne wyłączenie wszystkich tych wydruków debugowania, aby nie wpływały na wydajność kodu?

Wszystkie odpowiedzi dotyczą mojego nieużywanialogging moduł. Dobrze to zauważyć, ale tonie odpowiada na pytanie jak uniknąć wywołań funkcji, które znacznie spowalniają kod - w moim przypadku 25 razy (jeśli to możliwe (na przykład przez majstrowanie przy obiekcie kodu funkcji, aby usunąć wszystkie linie zprint oświadczenia lub jakoś inaczej)). To, co sugerują te odpowiedzi, zastępujeprint zlogging.debug, co powinno być jeszcze wolniejsze. To pytanie dotyczy całkowitego pozbycia się wywołań funkcji.

Próbowałem użyćlogging zamiastlambda *p: Nonei nic dziwnego, kod stał się jeszcze wolniejszy.

Może ktoś chciałby zobaczyć kod, w którym te wydruki spowodowały spowolnienie:http://ideone.com/n5PGu

I nie mam nic przeciwkologging moduł. Myślę, że dobrą praktyką jest zawsze trzymać się solidnych rozwiązań bez niektórychhacki. Ale myślę, że nie ma nic przestępczego, gdybym ich użyłhacki w 20-wierszowym fragmencie kodu jednorazowego.

Nie jako ograniczenie, ale jako sugestia, być może możliwe jest usunięcie niektórych linii (np. Zaczynając odprint) z kodu źródłowego funkcji i przekompiluj go? Podałem to podejście w odpowiedzi poniżej. Chociaż chciałbym zobaczyć kilka uwag na temat tego rozwiązania, z zadowoleniem przyjmuję inne podejścia do rozwiązania tego problemu.

questionAnswers(5)

yourAnswerToTheQuestion