我正在尝试创建一个函数plog(),该函数同时记录该函数和该函数的输出,以免我每次键入完整的记录命令。
>>> #! python
...
>>> import logging
>>>
>>> def plog(output, command):
... logging.debug('{} enumerates as {}'.format(str(command), str(output)))
...
>>> logging.basicConfig(level=logging.DEBUG,
... format='%(asctime)s - %(levelname)s - %(message)s')
>>> plog(type(True), 'type(True)')
2019-04-28 14:40:01,154 - DEBUG - type(True) enumerates as <class 'bool'>
但是,在调用plog时重复自己似乎很愚蠢-有一种我基本上可以打电话的方式:
>>> plog(type(True))
并收到相同的输出吗?
答案 0 :(得分:0)
@ Tomothy32建议使用eval()并不是最大的解决方案。 除了使用eval(),您还可以执行以下操作:
thread_data_s
您需要将方法调用更改为例如:
def plog(command, *args):
method_call_str = "{}({})".format(command.__name__ ,", ".join(str(a) for a in args));
logging.debug("{} enumerates to {}".format(method_call_str , command(*args)))
这将导致:plog(max, 1, 2)
答案 1 :(得分:-1)
您可以使用eval()命令执行传递给该方法的字符串:
def plog(command):
logging.debug('{} enumerates as {}'.format(command, eval(command)))
然后您可以将应作为字符串执行的代码传递给方法:
plog("type(True)")