【发布时间】:2019-10-28 02:33:20
【问题描述】:
是否可以用包装它的函数替换函数的实际代码?这里我试图用log 语句替换print 语句:
import logging
import re
def print_to_log(func):
def wrapper_print_to_log(*args, **kwargs):
# how to do something like this?
re.sub(r'print\s*\(', 'logging.info(', **function_code**)
return func(*args, **wargs)
return wrapper_print_to_log
@print_to_log
def greet(name='bob'):
print ("Hello, %s" % name)
print ("How are you sir?")
是否可以替换代码或做类似上述的事情?
【问题讨论】:
-
您的目标是在日志记录方面具有灵活性,还是您真的对动态重写代码感兴趣,这里的代码只是一个示例?
-
@bjudson 实际上是为了重写代码——日志记录只是一个例子。
-
你探索过猴子补丁(例如
unittest.mock模块)吗?
标签: python python-3.x decorator