Если вы сделали следующее, это сработало бы, однако вам придется немного изменить сигнатуру функции:
def inp(variableName, prompt='', inttype="str"):
operation = "global {variable}; {variable} = {cast}(input(prompt))"
exec(operation.format(variable=variableName, cast=inttype, prompt=prompt))
Так что вам потребуется изменить метод, чтобы он принимал строки в отличие от фактических значений. .
Поэтому, если вы хотите изменить переменную x, вам нужно будет передать строку "x"
Этот тип обертки exec внутри функции.
In [19]: def inp(variableName, prompt='', inttype="str"):
...: operation = "global {variable}; {variable} = {cast}(input(prompt))"
...: exec(operation.format(variable=variableName, cast=inttype, prompt=prompt))
...:
In [20]: inp("x", prompt="hello world", inttype="str")
hello worldbye!
In [21]: print(x)
bye!
Урок в том, что python является динамическим языком, и все возможно :) (однако я бы не рекомендовал это)