>>> def a():
... print(True)
...
>>> def b(func):
... funcs = {'a': a()}
... funcs[func]
...
>>> b('a')
True
>>>
Вы не потеряете производительность при вызове функции из словаря и на глаз вы точно не сможете определить где прямой вызов, а где из словаря.
Уменьшать кол-во чтений хорошо тогда, когда их десятки, а то и сотни тысяч - в остальных случаях просто забейте. Когда у вас будет достаточно опыта и знаний вы сами будете прекрасно понимать где, как и что можно оптимизировать. До этого - просто пишите код и пробуйте. Любое решение хорошо, если оно работает так, как задумывалось, остальное - фантики.