您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中可能有真正的动态和匿名函数?

Python中可能有真正的动态和匿名函数?

还有types.FunctionType,你可以用它来动态地创建的功能,例如@H_419_3@

def test_func(): print 'wow' 
dynf = types.FunctionType(test_func.func_code, {})
dynf()

输出:@H_419_3@

wow

您可能会反对这不是动态的,因为我正在使用另一个函数代码,但这仅是示例,这里有一种从python字符串生成代码方法,例如@H_419_3@

dynf = types.FunctionType(compile('print "really WoW"', 'dyn.py', 'exec'), {})
dynf()

输出:@H_419_3@

really WoW

现在,这是动态的!@H_419_3@

OP担心此类功能的动态性,因此这是另一个示例@H_419_3@

dynf = types.FunctionType(compile('test_func():\ntest_func()', 'dyn.py', 'exec'), globals())
dynf()

输出:@H_419_3@

wow
wow

注意:像这样创建Function对象似乎有局限性,例如,传递参数并不容易,因为要传递参数,我们需要将正确的co_argcount,co_varnames和其他12个变量传递给types.CodeType,理论上可以做到,但是容易出错,更简单的方法是将字符串作为模块导入,并且您具有完整的功能,例如@H_419_3@

import types
import sys,imp

code = """def f(a,b,c):
    print a+b+c, "really WoW"
"""
module = imp.new_module('myfunctions')
exec code in module.__dict__
module.f('W', 'o', 'W')

输出:@H_419_3@

WoW really WoW
python 2022/1/1 18:42:01 有274人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶