Использование exec () для запуска лямбда-функции из строки - PullRequest
1 голос
/ 15 июня 2019

Я хочу иметь возможность вводить лямбда-функцию из txt-файла и иметь возможность ее запуска, как если бы это был обычный фрагмент кода.


chain = "What has to be broken up"

reduction = 'lambda chain: chain[0:8]'

x = exec(reduction)

print(x)      #only prints out 'None'

print(exec(x = reduction))    #causes error

print(exec(reduction)) #prints out 'None'

Я надеюсь, что результатом будет первые 8 символов цепочки строк «Что имеет».Как я могу заставить эту работу запускать функцию?

Ответы [ 2 ]

2 голосов
/ 15 июня 2019

Я не уверен, что понимаю, что вы пытаетесь сделать, но вот предположение. Он использует eval вместо exec(), поскольку в reduction есть выражение:

chain = "What has to be broken up"
reduction = 'lambda string: string[0:8]'
x = eval(reduction)(chain)
print(x)  # -> What has
2 голосов
/ 15 июня 2019

Чтобы запустить функцию, вы должны использовать () после нее.

Чтобы получить значение выражения в строке, вам нужно использовать eval(), а не exec().См. В чем разница между eval, exec и compile? .

Поскольку у вашей лямбда-функции есть параметр, вам нужно дать ей аргумент при ее вызове.

chain = "What has to be broken up"
reduction = 'lambda c: c[0:8]'
x = eval(reduction)(chain)
print(x)

Если вы не хотите давать ему аргумент, вы должны убрать параметр.Но вам все равно нужно предоставить пустой список аргументов.

chain = "What has to be broken up"
reduction = 'lambda: chain[0:8]'
x = eval(reduction)()
print(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...