当前位置: 首页 > 面试题库 >

反映/检查Python中的封闭变量

蒯慈
2023-03-14
问题内容

如果我有:

def f(x):
  def g(y):
    return x + y
  return g

f2 = f(2)

有没有办法找到将要使用的x绑定f2?我看了看,inspect但无法确定某些frame内容是否适用。换句话说,我可以定义closed_vars()以下内容:

def closed_vars(anF):
    ... return ...

assert closedVars(f2) == {'x': 2}

问题答案:

您不必在inspect这里使用该模块。

>>> dict(zip(f2.func_code.co_freevars, (c.cell_contents for c in f2.func_closure)))
{'x': 2}

在Python 2.7中工作



 类似资料:
  • 问题内容: 使用hibernate的一个挑战是,被管理的类必须具有 默认的构造函数 。问题是没有明确的地方可以初始化类并可以检查不变量。 如果一个类的不变量依赖于多个属性,则该类的设计会变得复杂。让我们从假设的绿地设计开始: 这是不符合hibernate要求的基本实现。在构造函数中检查不变量。(checkInvariants()方法的内容并不重要,它只是为了说明类不变量可以依赖于一个以上的属性而已

  • 问题内容: 我已经看到了一些“解决方案”,但是每次的解决方案似乎都是“不要使用嵌套类,在外部定义类,然后再正常使用它们”。我不喜欢这个答案,因为它忽略了我选择嵌套类的主要原因,即拥有一个常量池(与基类相关联),该常量池可用于所有创建的子类实例。 这是示例代码: 所有类都传递一个参数,这是一个自定义的位流类。我的目的是要提供一种解决方案,该解决方案不需要我仍在ParentClass中时读取Child

  • 我有下面的代码,我正在检查两个变量的NOTNULL检查。 有没有办法在一个条件下检查not,比如在java中。

  • 问题内容: 当我编写这段代码时: 我认为它将输出以下内容: 但是,事实并非如此。我如何得到它来输出? 问题答案: Python变量包含对 值的 引用。因此,在定义列表时,您传入所引用的值,而不是变量本身。 您应该将值想象为气球,变量是绑定到那些气球的线程。是一个气球,只是该气球的一个线程,并且列表具有与该气球相关的 不同 线程。在python中,列表只是一系列线程,所有线程均从0开始编号。 接下来

  • 我正在尝试封送和取消封送映射到值对/从值对。我可以成功封送该对象,但是,我不能从XML中取消封送它。反封送结果是映射中存在的关键字,但其值为空。 下面是我要封送和取消封送的模型: 而且我还发现了一个关于这个问题的类似问题“JAXB:如何将映射编入 value ”,然而,它并没有解决解编组问题?

  • 问题内容: 我有一些这样的代码: 而且我收到警告,因为使用in闭包是可变变量,所以可能会引起问题。 我该如何避免呢?我的意思是我如何将不可变变量发送给回调,因为这是一个for循环,并且我无法更改代码?换句话说,如何将参数传递给闭包? 问题答案: 您需要创建一个范围以使用自执行功能正确捕获。这是因为整个for循环是一个作用域,也就是说,每次循环都捕获相同的变量。因此,回调将以错误的id结尾,因为的值