Как передать результат функции и вызывающую ее строку в функцию? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать функцию 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 голосов
/ 29 апреля 2019

Как подсказывает @ Tomothy32, использование eval () - не самое лучшее решение. Вместо использования eval () вы можете сделать что-то вроде этого:

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)

это приведет к: max(1, 2) enumerates to 2

0 голосов
/ 29 апреля 2019

Вы можете использовать команду eval () для выполнения строки, переданной методу:

def plog(command): logging.debug('{} enumerates as {}'.format(command, eval(command)))

Затем вы можете передать код, который должен быть выполнен в виде строки, методу:

plog("type(True)")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...