Python 如何使用编译后的代码对象创建函数对象?

Python 如何使用编译后的代码对象创建函数对象?,python,function,Python,Function,所以我有下面的代码 code_string = """def f1(p1, p2, p3): print("a{}, b{}, c{}".format(p1, p2, p3)) def f2(): print("text") """ code = compile(code_string, '<string>', 'exec') f1 = code.co_consts[0] f2 = code.co_consts[2] # code.co_consts is th

所以我有下面的代码

code_string = """def f1(p1, p2, p3):
    print("a{}, b{}, c{}".format(p1, p2, p3))
def f2():
    print("text")
"""

code = compile(code_string, '<string>', 'exec')

f1 = code.co_consts[0]
f2 = code.co_consts[2]  # code.co_consts is the name of the prior function ("f1")
code_string=“”定义f1(p1、p2、p3):
打印(“a{},b{},c{}”。格式(p1,p2,p3))
def f2():
打印(“文本”)
"""
代码=编译(代码\字符串','exec')
f1=代码。单位常数[0]
f2=code.co_consts[2]#code.co_consts是前一个函数(“f1”)的名称
它将包含一些函数的字符串编译成代码对象,然后将函数的代码对象存储到单独的变量中

我想知道的是如何使用上面的代码对象创建函数对象,这样我就可以调用它们了。

所以说
ff1=new_function(f1)
其中
isinstance(ff1,types.FunctionType)
将是
True
,我可以只做
ff1('a','b','c')
来打印
“aa,bb,cc”


可以使用exec执行
f1
f2
中的代码对象。(虽然我不知道如何将参数传递到
f1
中,或者用这种方式将参数生成一个绑定方法)

您可以使用
exec(code)
执行代码,然后
f1
f2
将对您可用

code_string = """def f1(p1, p2, p3):
    print("a{}, b{}, c{}".format(p1, p2, p3))
def f2():
    print("text")
"""

code = compile(code_string, '<string>', 'exec')
exec(code)

f1(1, 2, 3)
# a1, b2, c3
f2()
# text
code_string=“”定义f1(p1、p2、p3):
打印(“a{},b{},c{}”。格式(p1,p2,p3))
def f2():
打印(“文本”)
"""
代码=编译(代码\字符串','exec')
行政主任(代码)
f1(1、2、3)
#a1、b2、c3
f2()
#正文

请理解,将任意代码传递给
exec()
(或邪恶的
eval()
)会带来严重的安全风险。

您只需使用
exec(code)
执行代码,
f1
f2
即可

code_string = """def f1(p1, p2, p3):
    print("a{}, b{}, c{}".format(p1, p2, p3))
def f2():
    print("text")
"""

code = compile(code_string, '<string>', 'exec')
exec(code)

f1(1, 2, 3)
# a1, b2, c3
f2()
# text
code_string=“”定义f1(p1、p2、p3):
打印(“a{},b{},c{}”。格式(p1,p2,p3))
def f2():
打印(“文本”)
"""
代码=编译(代码\字符串','exec')
行政主任(代码)
f1(1、2、3)
#a1、b2、c3
f2()
#正文
请理解,将任意代码传递给
exec()
(或evil
eval()
)会带来严重的安全风险