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

在Python中修改闭包的绑定变量

微生新霁
2023-03-14
问题内容

有没有办法修改闭包内部变量之一的绑定值?查看示例以更好地理解它。

def foo():
    var_a = 2
    var_b = 3

    def _closure(x):
        return var_a + var_b + x

    return _closure


localClosure = foo()

# Local closure is now "return 2 + 3 + x"
a = localClosure(1) # 2 + 3 + 1 == 6

# DO SOME MAGIC HERE TO TURN "var_a" of the closure into 0
# ...but what magic? Is this even possible?

# Local closure is now "return 0 + 3 + x"
b = localClosure(1) # 0 + 3 +1 == 4

问题答案:

我认为在Python中没有任何方法可以做到这一点。定义闭包后,将捕获封闭范围内变量的当前状态,并且不再具有可直接引用的名称(从闭包外部)。如果要foo()再次调用,则新的闭包将具有与封闭范围不同的变量集。

在简单的示例中,使用类可能会更好:

class foo:
        def __init__(self):
                self.var_a = 2
                self.var_b = 3

        def __call__(self, x):
                return self.var_a + self.var_b + x

localClosure = foo()

# Local closure is now "return 2 + 3 + x"
a = localClosure(1) # 2 + 3 + 1 == 6

# DO SOME MAGIC HERE TO TURN "var_a" of the closure into 0
# ...but what magic? Is this even possible?
localClosure.var_a = 0

# Local closure is now "return 0 + 3 + x"
b = localClosure(1) # 0 + 3 +1 == 4

如果您确实使用了这种技术,我将不再使用该名称,localClosure因为它实际上不再是一个闭包。但是,它的工作原理与以前相同。



 类似资料:
  • 我是Python新手,我正在尝试将数据存储在.json中,然后通过Python访问和修改它。目前我遇到一个问题,如果我尝试使用变量而不是直接修改它,我就无法修改数据。如果它不在变量中,或者我只是在读取信息,或者它不在函数中,它就可以正常工作。 . json:

  • 问题内容: 我是Python新手,使用绑定变量时遇到麻烦。如果我执行下面的代码,一切正常。 相反,如果我添加另一个绑定变量,则会出现错误。 我已经解决了 但我不明白为什么以前的命令不正确。 哪种正确的方法使用绑定变量?我正在使用cx_Oracle。 问题答案: 您正在滥用绑定。 使用cx_Oracle绑定变量有三种不同的方式,可以在这里看到: 1)通过将元组传递给带有 编号变量 的SQL语句: 2

  • 问题 你想要扩展函数中的某个闭包,允许它能访问和修改函数的内部变量。 解决方案 通常来讲,闭包的内部变量对于外界来讲是完全隐藏的。 但是,你可以通过编写访问函数并将其作为函数属性绑定到闭包上来实现这个目的。例如: def sample(): n = 0 # Closure function def func(): print('n=', n) #

  • 问题内容: 我一直在研究用于自动构建的基本测试框架。下面的代码代表使用不同程序对两台机器之间的通信进行的简单测试。在实际执行任何测试之前,我想完全定义它们- 因此,下面的此测试直到声明所有测试后才真正运行。这段代码只是测试的声明。 无论如何,运行测试后,它将运行“ passIf”定义的功能。由于我想为多个客户端运行该测试,因此我要迭代它们并为每个客户端定义一个测试- 没什么大不了的。但是,在第一个

  • 问题内容: 在此代码段中,我可以从bar函数内部打印counter的值 但是,当我尝试从bar函数内部递增计数器时,出现UnboundLocalError错误。 带有增量语句的代码段。 在Python闭包中,您仅对外部函数中的变量具有读取权限吗? 问题答案: 您无法在Python 2中对闭包变量进行突变。在Python 3中,由于您使用了它,您可以声明它们: 否则,内部的赋值将使变量成为本地变量,

  • 问题内容: 我正在尝试从cron运行python脚本,但是它无法正常运行,所以我假设它的路径env变量不同。无论如何,要在python脚本中更改变量吗? 问题答案: 您无需从python脚本中设置PATH。取而代之的是 在您的crontab的顶部。然后,这些环境变量将可用于通过您的crontab运行的所有cron作业。