python 函数嵌套和nonlocal关键字

python 函数嵌套和nonlocal关键字python函数可以嵌套使用,使用也比较简单,举个栗子:defouter():print("outer")definner():print("inner")inner()outer()##运行结果:outerinnernonlocal关键字:与global关键字有点相似,可以对比着理解。nonlocal关键字只能作用域局…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

python函数可以嵌套使用,使用也比较简单,举个栗子:

def outer():
    print("outer")
    def inner():
        print("inner")
    inner()
outer()

## 运行结果:
outer
inner

nonlocal关键字:

与global关键字有点相似,可以对比着理解。nonlocal关键字只能作用域局部变量,且始终找离当前最近的上层局部作用域中的变量。看栗子:

a = 1
def outer():
    nonlocal a
    a = 2
outer()
print(a)

结果:报错  SyntaxError: no binding for nonlocal ‘a’ found,

原因分析:nonlocal关键字是能作用域局部变量,当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,结果没找着,报错。

a = 1
def outer():
    global a 
    a = 2
    def inner():
        nonlocal a
        a = 3
    inner()
    print(a)
outer()
print(a)

结果:报错  SyntaxError: no binding for nonlocal ‘a’ found,

原因分析:当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,此时外层局部作用域虽然能找到变量a,但是这找到的 这个a 已经被global声明为全局变量了,所以报错。

a = 1
def outer(): 
    a = 2
    def inner():
        nonlocal a
        a = 3
        def inner2():
            print(a)
        inner2()
        print(a)
    inner()
    print(a)
outer()
print(a)

## 运行结果:
3
3
3
1

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196874.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月18日 下午1:22
下一篇 2025年9月18日 下午2:01


相关推荐

  • Linux系统没有groupadd命令怎么办

    Linux系统没有groupadd命令怎么办Linux 系统没有 groupadd 命令 也不能联网安装 怎么办 自己动手 丰衣足食 通过一个 shell 脚本搞定脚本 groupadd bin bash vim sw 4 ts 4 et lt

    2026年3月17日
    1
  • cucumber之Gherkin入门

    cucumber之Gherkin入门什么 CherkinGherk Cucumber 解释器可以理解的语言 这是一个商业可读性 领域特定语言 描述软件的行为而不需要关心这个行为的如何实现的 Gherkin 是一种自然语言 使用一组特殊的关键字来为可执行规范赋予结构和意义 在我的理解里 Gherkin 是 Cucumber 作为 BDD 行为驱动开发 的自动化框架的核心 因为 Gherkin 的描述基本接近于 UserStory 通过 Gherkin 文档 可以让业务人员 开发人员 测试人员或者其他方的人员通过同一份文档对需求的结果理解达成一致 确保产品

    2026年3月17日
    2
  • ExecuteRun「建议收藏」

    ExecuteRun「建议收藏」ExecuteRun

    2022年4月24日
    57
  • PS最近使用项怎么删除?3种方法轻松解决

    PS最近使用项怎么删除?3种方法轻松解决

    2026年3月15日
    2
  • DHCP option82字段「建议收藏」

    DHCP option82字段「建议收藏」DHCPoption82字段的添加1.添加option82字段1.添加option82字段option82是dhcp报文中的中继代理信息选项(relayagentinformationoption),抓取上行的dhcp报文,根据目的端口为67的报文进行处理,解析报文,在原始报文的基础上添加option82字段,添加之后进行ip,udp的重新校验值的计算,然后发往PON口。温馨提示:以上文章描述如有不清晰之处,欢迎在评论区评论,如有时间,会第一时间回复,谢谢!…

    2022年10月16日
    3
  • windows 10 安装composer问题[通俗易懂]

    windows 10 安装composer问题[通俗易懂]选择手动安装composerhttps://getcomposer.org/download/我选的1.10.0版本

    2022年8月18日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号