66、Python 3.x 中的 nonlocal 语句详解

Python 3.x 中的 nonlocal 语句详解

1. 嵌套作用域概述

在 Python 里,作用域可以任意嵌套。不过在引用名称时,只会搜索包含该函数的 def 语句(而非类)。例如:

def f1():
    x = 99
    def f2():
        def f3():
            print(x)  # 在 f1 的局部作用域中找到!
        f3()
    f2()

f1()

上述代码输出为 99 。Python 会在检查函数的局部作用域之后、检查模块的全局作用域之前,从内到外搜索包含该函数的所有 def 语句的局部作用域。但在实际编程中,这种代码并不常见。因为在 Python 里,扁平结构优于嵌套结构,即便引入了嵌套作用域,这一原则仍然适用。尽量减少嵌套函数定义的数量,会让开发和协作更加轻松。

2. Python 3.x 中的 nonlocal 语句

2.1 nonlocal 语句简介

从 Python 3.x 开始(Python 2.x 不支持),引入了 nonlocal 语句,它允许嵌套的 def 语句读写包含它的函数作用域中的变量。这使得嵌套作用域的闭包更加实用,能提供可修改的状态信息。

nonlocal 语句在形式和用途上与 global 语句很

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值