Отключение отладочных отпечатков

Иногда у меня много отпечатков, разбросанных по функциям для вывода отладочной информации. Чтобы переключить эти выходные данные отладки, я придумал это:

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

Или, если мне нужно распечатать что-то кроме отладочного сообщения, я создаюdprint функция для отладочных сообщений.

Проблема в том, когдаdebug=False, этотprint операторы значительно замедляют код, потому чтоlambda *p: None все еще вызывается, и вызов функции, как известно, медленный.

Итак, мой вопрос: есть ли лучший способ эффективно отключить все эти отладочные отпечатки, чтобы они не влияли на производительность кода?

Все ответы касаются моего неиспользованияlogging модуль. Это приятно заметить, но этоdoesn't answer the question как избежать вызовов функций, которые значительно замедляют код - в моем случае 25 раз (если это возможно) (например, возиться с объектом кода функции, чтобы убрать все строки сprint заявления или как-то еще)). То, что предлагают эти ответы, заменяетprint сlogging.debug, который должен быть еще медленнее. И этот вопрос касается полного избавления от этих вызовов функций.

Я пытался с помощьюlogging вместоlambda *p: Noneи неудивительно, что код стал еще медленнее.

Может быть, кто-то хотел бы увидеть код, где эти отпечатки вызвали замедление 25:http://ideone.com/n5PGu

И я ничего не имею противlogging модуль. Я думаю, что это хорошая практика - всегда придерживаться надежных решений без каких-либоhacks, Но я думаю, что нет ничего преступного, если бы я использовал этиhacks в 20-строчном фрагменте одноразового кода.

Не как ограничение, а как предложение, возможно, возможно удалить некоторые строки (например, начиная сprint) из исходного кода функции и перекомпилировать его? Я изложил этот подход в ответе ниже. Хотя я хотел бы увидеть некоторые комментарии по этому решению, я приветствую другие подходы к решению этой проблемы.

Ответы на вопрос(5)

Ваш ответ на вопрос