【问题标题】:How to set the content of a closure cell?如何设置闭包单元格的内容?
【发布时间】:2019-12-10 23:28:51
【问题描述】:

The following question 展示了如何创建一个闭包单元对象,以便以编程方式构造带有闭包的函数。

但是,这里有一个先有鸡还是先有蛋的问题,我需要创建单元格来创建函数,但在创建函数之前,我可能无法最终确定单元格所具有的值。 (举个疯狂的例子,如果我想把函数本身放在它的一个单元格中呢?)

有没有办法设置单元格的 cell_contents ?我尝试分配给它,但我得到一个 AttributeError 声称 cell_contents 不可写!

编辑:我刚刚意识到 cell_contents 在最新版本的 Python3 (3.7) 中是可写的,尽管不是在我正在使用的最新 pypy (3.6) 版本中。

【问题讨论】:

  • 我刚刚意识到 cell_contents 在最新版本的 Python 3.x 中是可写的,尽管不是在我正在使用的最新 pypy 版本中。我等了太久才问/回答这个问题。哦,好吧 - 在升级之前它对 pypy 仍然有用。

标签: python python-3.x pypy


【解决方案1】:

在 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' nonlocal 映射到单元格的 content,因此分配给它会改变单元格的内容.

(我不确定在 python 2 中是否也有不使用 C 代码的方法,如链接问题的答案。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多