4.6 Python局部函数

6、局部函数

1)理解局部函数

说明:函数体内定义的函数。默认情况下,局部函数对外隐藏,只能在其封闭函数内使用

2)定义、使用局部函数

def foo():
    print('foo函数')
    
    def bar():    # 局部函数
        print('bar函数')   
    
    bar()
    
foo()
# bar()    # 无法访问

foo函数
bar函数

3)封闭函数返回局部函数

def foo():
    print('foo函数')
    
    def bar():    # 局部函数
        print('bar函数')   
    
    return bar

# foo() 函数的返回值是 bar 函数,因此此处可用 r 变量来保存 bar 函数
r = foo()
print(r, type(r))

foo函数
<function foo..bar at 0x000000B8B7CDA840> <class ‘function’>

# r 此处为函数
r()

bar函数

foo()()

foo函数
bar函数

4)局部函数的变量遮蔽

def test():
    name = 'python'
    def info():
        print('info函数')
        # 报错,下面代码为 info 局部函数再次定义 name 局部变量
        # 此时 name 变量会遮蔽 test 函数内的 name 局部变量
        print('第一次name:', name)    
        name = 'java'
        print('第二次name:', name)
        
    info()
    print('第三次name:', name)    
test()

info函数
UnboundLocalError: local variable ‘name’ referenced before assignment

解决方式:

def test():
    name = 'python'
    def info():
        print('info函数')
        
        nonlocal name     # 声明nama变量不是新的局部变量,而是引用所在封闭函数的局部变量
        print('第一次name:', name)
        
        name = 'java'
        print('第二次name:', name)
        
    info()
    print('第三次name:', name)     # name 值改变

test()

info函数
第一次name: python
第二次name: java
第三次name: java

比较:

  • nonlocal 和 global 功能相似,都用于避免变量被遮蔽
  • global 用于声明访问全局变量,nonlcal 用户声明访问局部函数所在的封闭函数之内的局部变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值