Поскольку replace - это метод класса string, он должен вызываться из самой строки.
def f(x):
input = "math.log((math.sin(x)**2) + 1) - (1 / 2)"
string = input.replace("x",str(x))
result = eval(string)
return result
Но вы должны избегать вызова eval, если только вам это не нужно;Эвал это зло.Eval (и его двоюродный брат exec) могут открыть вашу программу для произвольных инъекций кода.
Можете ли вы объяснить ваш сценарий использования немного больше, и я могу посмотреть, могу ли я предложить лучшую альтернативу?
Почему бы не сработать:
def f(x):
return math.log((math.sin(x)**2) + 1) - (1 / 2)