2024-04-25 14:23:01 发布
网友
我试着这么做:
def Play(self, logic, board, id): exec(logic) l = Logic() return l.Play(id, board)
logic包含类逻辑的代码。你知道吗
logic
错误是
NameError: global name 'Logic' is not defined
因为exec()现在是一个函数,所以不能再使用它在Python函数中设置本地名称。你知道吗
exec()
在python2中,exec是一个语句,编译器可以检测到它的使用并禁用函数的正常本地名称优化。你知道吗
exec
将代码执行到新字典中:
namespace = {} exec(logic, namespace) l = namespace['Logic']()
演示:
>>> logic = '''\ ... class Logic: ... def Play(self, id, board): ... return id, board ... ''' >>> def Play(logic, board, id): ... namespace = {} ... exec(logic, namespace) ... l = namespace['Logic']() ... return l.Play(id, board) ... >>> Play(logic, 'foo_board', 'bar_id') ('bar_id', 'foo_board')
因为
exec()
现在是一个函数,所以不能再使用它在Python函数中设置本地名称。你知道吗在python2中,
exec
是一个语句,编译器可以检测到它的使用并禁用函数的正常本地名称优化。你知道吗将代码执行到新字典中:
演示:
相关问题 更多 >
编程相关推荐