@wows15
В автоматизации сила, брат

Как вызвать переменную с типом данных string?

Пользователь вводит функцию, а я потом с ней работаю. Питон воспринимает значение «y» как тупо строку, а не как что-то, с чем можно работать.
y = input( ‘Введите функцию’ )
x = input( ‘Введите аргумент (x)’ )
answer = y(x)

Ошибка: TypeError: type ‘str’ cant be called.
  • Вопрос задан
  • 109 просмотров
Решения вопроса 2
@0pauc0
exec (y + '("' + str(x) + '")')

Но так делать опасно
Ответ написан
@wows15 Автор вопроса
В автоматизации сила, брат
Всем спасибо за ответы. Всё-таки я сам пришёл к правильному результату, который я хотел. Вот он:
y = input( 'Введите функцию: ' )
x = int( input( 'Введите аргумент (x): ' ) )

def function(x):
    return eval(y)

print( 'Ответ: ' + function(x))

Ближе всего к ответу был Rais. Я узнал что такое exec, потом узнал что есть еще и eval, решил проверить что будет если написать просто eval, и ура, оно заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ScriptKiddo
@ScriptKiddo
Вам нужно получить функцию по имени

import sys

this_module = sys.modules[__name__]


def square(x):
    return x * x


print(getattr(this_module, 'square')(10))


OUT


Foo

Process finished with exit code 0


Source: https://stackoverflow.com/a/2933481

Либо делать вот так

def square(x):
    return x * x


functions = {
    'square': square
}

print(functions['square'](10))


OUT

100

Process finished with exit code 0

Ответ написан
@galaxy
Если функция у вас в скрипте определена: locals()[y](x)
Можно также встроенные функции вызывать: locals()['__builtins__'][y](x)

Тот еще говнокод, конечно..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы