如何将函数结果和调用它的字符串都传递给函数?

时间:2019-04-28 21:40:26

标签: python function

我正在尝试创建一个函数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))

并收到相同的输出吗?

2 个答案:

答案 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)")