Как уже упоминалось в комментариях, то, что вы запрашиваете, технически невозможно - функция знает (и не может иметь) какие-либо сведения о том, что будет делать вызывающий код с возвращаемым значением.
Для простого случая, подобного вашему примеру фрагмента, очевидным решением является просто удалить вызов print
из функции и оставить его вызывающей стороне, то есть:
def fun():
return 'a'
print(fun())
Теперь я предполагаю, что ваш реальный код немного сложнее, поэтому такое простое решение не сработает.В этом случае решение состоит в том, чтобы разделить исходную функцию на множество отдельных и позволить вызывающей стороне выбрать, какую часть она хочет вызвать.Если у вас сложное состояние (локальные переменные), которое необходимо разделить между различными частями, вы можете заключить все это в класс, превратив подфункции в методы и сохранить эти переменные в качестве атрибутов экземпляра.