[The following question显示了如何创建闭包单元对象,以便以编程方式构造具有闭包的函数。
但是,这里存在一个鸡与蛋的问题,我需要创建单元格来创建函数,但是直到函数创建后,我才能最终确定希望单元格具有的值。 (作为一个疯狂的例子,如果我想将函数本身放在其中一个单元格中怎么办?)
是否可以设置单元格的cell_contents?我尝试分配给它,但是却收到AttributeError,声称cell_contents不可写!
编辑:我刚刚意识到cell_contents在最新版本的Python3(3.7)中是可写的,尽管不是在我正在使用的最新pypy(3.6)版本中。
在python 3.x上,可以完成以下肮脏的把戏:
from types import FunctionType
def set_cell(cell, value):
def cell_setter(value):
nonlocal cell
cell = value # pylint: disable=unused-variable
func = FunctionType(cell_setter.__code__, globals(), "", None, (cell,)) # same as cell_setter, but with cell being the cell's contents
func(value)
为了扩展注释,在执行func时,将调用cell_setter的代码,但将'cell'非本地映射到单元格的[[content,因此为其分配值将更改单元格的内容。
((我不确定在python 2中是否也有办法不使用C代码,如对链接问题的回答。)