gpt4 book ai didi

python - 从函数内返回未知名称的函数

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:36 24 4
gpt4 key购买 nike

code = "def foo(): return 'bar'"

def lol(code):
exec code
return foo

a = lol(code)
print a()

这可以正常工作,但是当我们不知道字符串中的函数被调用时,问题就开始了。如果我能保证代码很小,只有一个函数,我怎样才能返回该函数?

我想到的一个解决方案是只要求函数被称为“foo”等,所以我可以返回它,但感觉很丑。

想法?

最佳答案

您可以通过显式指定 exec 用于全局和本地执行上下文的字典来实现。之后,用于局部变量的函数对象应该有一个条目,可以在不知道其名称的情况下返回该条目,因为它应该是字典中定义的唯一项目:

from textwrap import dedent
import types

def lol(code):
globals_ = {"__builtins__": None} # no built-ins for safety
locals_ = {}

exec(code, globals_, locals_)

if len(locals_) != 1:
raise ValueError("code didn't define exactly one item")
value = locals_.popitem()[1] # get value of the one item defined
if type(value) != types.FunctionType:
raise ValueError("code didn't define a function")

return value # return function object that was defined

my_code = dedent("""
def foo():
return 'bar'
""")

a = lol(my_code)
print(a())

关于python - 从函数内返回未知名称的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37088933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com