【问题标题】:Possible to turn an input string into a callable function object in Python? [duplicate]可以将输入字符串转换为 Python 中的可调用函数对象吗? [复制]
【发布时间】:2019-06-24 11:20:28
【问题描述】:

我希望能够获取一个描述 Python 函数的字符串并将其转换为我可以调用的函数对象。例如,

myString = "def add5(x):
   return x + 5"
myFunc = myString.toFunction() <-- something like this?
print myFunc(10)     <-- should print 15

我希望能够做到这一点源于我的计算类理论基础中提出的一个问题,它在 SISO(字符串输入,字符串输出)的假设下运行。特别是,我们正在研究不可计算的问题 yesOnString(P,I),如果 P(I) = “yes”,则返回“yes”,否则返回“no”。因此,我希望能够将函数 P 以字符串形式作为参数传递,然后让函数将字符串转换为然后调用的函数。

【问题讨论】:

  • @Kingsley eval() 不起作用,但 exec() 会,但它只会引入 add5 作为函数名称。 @SufiyanGhori 你不能使用仅用于文字的literal_eval - 这是代码。
  • @AChampion - 我认为exec() 是 OP 想要的。即使它支持exec('import os')exec('os.system("rm -rf blah")')
  • 是的,强制性警告。
  • @TigerhawkT3:这不是重复的。 OP 已经明确表示他想将字符串转换为函数并将其存储为变量。原始问答中没有回答。

标签: python string function


【解决方案1】:

这可以通过 Python 内置的exec() function 实现。

myString = "def myFunc(x): return x + 5"
exec( myString )  # myFunc = myString.toFunction() <-- something like this?
print( myFunc(10) )  #   <-- should print 15

如果你想保持相同的命名模式

myString = "def add5(x): return x + 5"
exec( myString )  # myFunc = myString.toFunction() <-- something like this?
myFunc = add5
print( myFunc(10) )  #   <-- should print 15

在安全方面:exec()执行给定字符串,any给定字符串。

import os.system
os.system("format C:")  # etc.

所以要非常小心它的使用方式。当然不是任何形式的用户输入。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2012-12-03
    • 2018-09-16
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多