Как проверить, присвоено ли возвращаемое значение функции чему-либо в Python

У меня есть функция с возвращаемым значением. Я бы хотел, чтобы функция вела себя по-другому, когда возвращаемое значение функции чему-то присваивается.

Так что примерно так:

def func():
    if return_value_assigned():
         print("yes")
    else:
         print("no")
    return 0

# this should print "no"
func()

# this should print "yes"
a = func()

Я пробовал использовать этот метод:

frame_stack = inspect.getouterframes(inspect.currentframe())
code_context = frame_stack[2].code_context[0]
is_return_value_assigned = re.match(r"[\w+ ,]*=", code_context) is not None

Однако, видимо, code_context хранит только последнюю строку вызова функции. Так, например, это не сработает:

a = func(*args, 
    **kwargs)

Есть ли лучший способ сделать это? Можно ли получить контекст кода всего вызова функции, а не только последней строки?

1 ответ

Единственный вариант, который имеет хоть какой-то смысл в отношении всех стандартов программирования в отношении обязанностей вызывающего и вызываемого, которые я когда-либо видел, это что-то вроде этого:

def foo(return_value=True):
    if return_value:
        print("yes")
    else:
        print("no")
    return 0

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

Другие вопросы по тегам