Ничего не понял, но наверное как-то так
>>> def heyfunc():
... print('hey')
...
>>> def supfunc():
... print('sup')
...
>>> funcdict = {'heyfunc': heyfunc, 'supfunc': supfunc}
>>> f_name = input()
hey
>>> next_func = funcdict.get(f_name+'func')
>>> next_func
<..function heyfunc at 0x10926d268..>
>>> next_func()
hey
Кстати, если хочется упороться, то можно сделать декоратор:
card_funcs = {}
def register_cf(card_func):
'''register card function'''
card_funcs[card_func.__name__] = card_func
return card_func
@register_cf
def card_func1():
print('Running card1')
@register_cf
def card_func2():
print('Running card2')
@register_cf
def card_func3():
print('Running card3')
if __name__ == '__main__':
print('running funcs from registry:')
for fn, fobj in card_funcs.items():
print(fn, '->', fobj)
fobj()
-----
running funcs from registry:
card_func3 -> <..function card_func3 at 0x1069ae9d8..>
Running card3
card_func2 -> <..function card_func2 at 0x1071ea9d8..>
Running card2
card_func1 -> <..function card_func1 at 0x10db190d0..>
Running card1
Не надо словарь хардкодить + удобно расширять