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()
(或evileval()
)会带来严重的安全风险