python - 如何设置闭包单元格的内容?
问题描述
以下问题显示了如何创建闭包单元对象,以便以编程方式构造带有闭包的函数。
但是,这里有一个先有鸡还是先有蛋的问题,我需要创建单元格来创建函数,但在创建函数之前,我可能无法最终确定单元格所具有的值。(作为一个疯狂的例子,如果我想把函数本身放在它的一个单元格中呢?)
有没有办法设置单元格的 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”非本地映射到单元格的内容,因此分配给它会更改单元格的内容。
(我不确定在 python 2 中是否也有一种方法,而无需求助于 C 代码,如链接问题的答案。)
推荐阅读
- c++ - 在 C++-17 中,如何在编译时检测模板化静态成员函数的存在
- git - Github 的主页?
- java - EJB 与执行相同功能的其他技术的主要区别?
- r - 对数据表对象使用 facet wrap
- python - 如何在乌龟中不回溯路径的情况下制作未填充的策略?
- discord.js - .setTimestamp 不适用于使用循环编辑的嵌入
- ruby-on-rails - Rails(5.2)中的防弹资产管道规范-如果资产pipie中缺少任何model.css或model.coffee,如何强制测试失败
- c# - Graph Api 读取电子邮件的权限
- python - python: tkinter 切换 svg 内容
- javascript - 比较两个不同的对象数组并在 API 调用后找到匹配项时将数据推送到新对象