Generally, a function should do one thing and do it well.
It's conceivable that the one thing should be one of a selection but only if there's a lot of commonality.
The best way to do that is exactly the way you seem reticent to use, you pass more information on what to do.
Perhaps the problem we should be solving is your reticence or the proposed design :-)
If there is commonality and you're not willing to change the API because of the effect on current callers, there is another way.
Provide a new function to the new specification and change the old function to call it. For example, say you have a function to find the sum of two numbers:
def sum (a, b):
return a + b
Now you want a new function that will either give you the sum or the difference and you don't want to change the current callers:
def sumOrDiff (type, a, b):
if type == 'sum':
return a + b
return abs (a - b)
def sum (a, b):
return sumOrDiff ('sum', a, b);
That way, you have the common code in one place (and I'd hope it's more complex than that) but without changing the calls already using it.
This is a well-worn method for making changes while keeping code simple, and not breaking backward compatibility.
Now that's a contrived example. In reality, I'd still provide a separate function for sum and difference. Your actual use case will hopefully make more sense.