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

Python覆盖嵌套函数中的变量

凌修伟
2023-03-14
问题内容

假设我有以下python代码:

def outer():
    string = ""
    def inner():
        string = "String was changed by a nested function!"
    inner()
    return string

我想调用external()返回“字符串已被嵌套函数更改!”,但我得到了“”。我得出结论,Python认为该行string = "string was changed by a nested function!"是对inner()局部的新变量的声明。我的问题是:如何告诉Python应该使用external()字符串?我不能使用global关键字,因为字符串不是全局的,它只存在于外部作用域中。有想法吗?


问题答案:

在Python
3.x中,可以使用nonlocal关键字:

def outer():
    string = ""
    def inner():
        nonlocal string
        string = "String was changed by a nested function!"
    inner()
    return string

在Python 2.x中,您可以使用带有单个元素的列表并覆盖该单个元素:

def outer():
    string = [""]
    def inner():
        string[0] = "String was changed by a nested function!"
    inner()
    return string[0]


 类似资料:
  • 问题内容: 我知道它看起来会令人费解,但是请帮助我了解发生了什么。 给出: 所以基本上,为什么我没有得到三种不同的动物?是不是“打包”到嵌套函数的局部作用域中?如果不是,对嵌套函数的调用如何查找局部变量? 我知道遇到这类问题通常意味着一个人“做错了”,但是我想了解会发生什么。 问题答案: 嵌套函数在执行时(而不是在定义时)从父范围中查找变量。 编译函数主体,然后验证“自由”变量(未在函数本身中通过

  • 问题内容: 有什么方法可以防止子类覆盖基类中的方法? 我的猜测是没有,但是我来自.NET界,并且我正试图使我的API尽可能健壮,因此,任何输入都将不胜感激。 可以强制执行吗?我知道编译器无济于事,所以也许通过一些运行时检查来解决?还是这不是一种处理事情的Python方法? 问题答案: 您是对的:您的尝试与Python的结构及其文化背道而驰。 记录您的API,并教育您的用户如何使用它。这是他们的程序

  • 问题内容: 是否有可能覆盖 全局 功能,从而在一定程度上影响 全局 功能? 据我所知,该函数在包装NodeJS脚本的函数中作为参数提供: 有什么方法可以修改功能吗? 这可能只会影响脚本所在的脚本。 我们如何在流程级别进行修改? 问题答案:

  • 问题内容: 我得到输出b 3。为什么它没有给出b13作为输出。任何人都可以解释一下。 问题答案: 假设Foo类声明如下 变量没有覆盖的概念。他们只是被蒙面。 它正在打印3,因为当您使用超类引用访问变量时,它仅访问在超类中声明的变量。 请记住,超类对子类一无所知。

  • 问题内容: 我有一个方法,我已经分解成一些较小的嵌套函数来分解代码库: 有没有一种方法可以单独运行其中一个嵌套函数。例如: 编辑: 我正在尝试在使用pyramid_breaker构建的Web服务器上设置缓存 这是我的理解可能不准确: 现在我有这个原因是因为装饰器用来创建缓存键的名称空间是从函数和争论中产生的。因此,您不能仅将装饰器放在getThis上,因为请求变量是唯一的,并且缓存是无用的。所以我

  • 下面是在我的一个组件上运行的输出: 请注意,不是100,测试失败。(覆盖门槛不是我设置的。我不会设定这么高的门槛。) 问题是,Jest没有告诉我哪些是未覆盖的线条。此外,我也很难理解的含义。我甚至找不到这个的官方文档。 感谢您的帮助!