python_嵌套函数和nonlocal关键字和LEGB

一、嵌套函数(内部函数)

嵌套函数:在函数内部定义的函数!

def outer():
    print("我信你个大头鬼")
    def inner():
        b=10
        print("我一定会成功的")
    inner()
outer()

一般在什么情况下使用嵌套函数?

  1. 封装- 数据隐藏
    外部无法访问“嵌套函数”。
  2. 贯彻DRY(Don’t Repeat Yourself) 原则
    嵌套函数,可以让我们在函数内部避免重复代码。
#嵌套函数可以避免我们重复调用内部代码!
def print_name(isChinesename,name,familyname):
    def inner(a,b):#只是负责打印的形式
        print("{0} {1}".format(a,b))
    if isChinesename:#对isChinesename的调用,
        inner(familyname,name)#只是负责inner()函数的调用
    else:
        inner(name,familyname)
print_name(True,"yuanyuan","bu")#这里的“yuanyuan”对应name 参数,"bu"对应familyname参数
print_name(False,"Donald John","Trump")#这里“"Donald John"”对应name参数,“Trump”对应familyname 参数
执行结果:
bu yuanyuan
Donald John Trump

  1. 闭包

二、nonlocal 关键字

nonlocal

用来声明外层的局部变量。

global

用来声明全局变量。

a=100
def outer():
    b=20
    global a
    a=120
    print("outer a:",a)
    def inner():

        nonlocal b#如果在内部嵌套函数中使用局部变量(即使是打印局部变量,也需要进行nonlocal说明)
        b=30
        print("inner b:",b)
        global a
        a = 130
        print("inner a:", a)
    inner()

outer()
运行结果:
outer a: 120
inner b: 30
inner a: 130

三、LEGB 规则

Python 在查找“名称”时,是按照LEGB 规则查找的:
Local–>Enclosed–>Global–>Built in
Local 指的就是函数或者类的方法内部
Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global 指的是模块中的全局变量
Built in 指的是Python 为自己保留的特殊名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值