python作用域

1.python作用域分4层,由内向外依次是:

  1. local:局部作用域(函数内部)
  2. nonlocal:内部嵌套作用域 (外部的嵌套函数)
  3. global:全局作用域(整个py文件)
  4. build-in:内建作用域

2.内层作用域对外层变量仅有读权限:
  main函数内部对x进行运算,因此函数内部会将x视为局部变量,而x之前并未被赋值,因此会报错

x = 10
def main():
    print(x)  #此处报错:UnboundLocalError
    x += 1    #此处报错:UnboundLocalError
    print(x)  

main()

3.函数内部对全局变量进行操作:
  当函数内部传入可变的全局变量,可以修改其内部的数据,但进行赋值操作时并不会影响全局变量(因为对全局变量只有读权限,因此赋值相当于创建一个局部变量)

    L = [1,2,3]
    def func(a):
        a[0] = 0        #此处会修改全局变量L中的数据
        a = [4,5,6]        #此处局部变量a重新赋值,不会影响L
        print('a=',a,'L=',L)        #a = [4,5,6],L = [0,2,3]
    func(L)
    print(L)        # [0,2,3]

4.闭包问题

def inc():
    x = 0
    def inner():
        nonlocal x
        x += 1
        print(x)
    return inner
inc1 = inc()    #inc1和inc2绑定内层函数inner,独立开辟两块存储空间
inc2 = inc()

inc1()  #打印1
inc1()  #打印2
inc1()  #打印3
inc2()  #打印1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值