python函数作用域

1.命名空间

    命名空间是名字和对象的映射,也可以把namespace理解为一个字典,举一个通俗的例子,如果把我们的工程当做一个一栋楼,则这个工程文件里面的.py文件可以当成我们的命名空间.

2.命名空间的种类

    1.局部 :函数内部的命名空间就是局部变量

    2.全局: 模块内(.py文件)的命名空间就是全局的

    3.内置: 系统自带的命名空间

    4.闭包: 嵌套的父级函数的局部作用域,即包含此函数的上级函数的作用域

3.范围作用域

    内置 > 全局 > 闭包 > 局部

4.作用域

    作用域是python程序的某一段或者某些段,在这些地方,摸个命名空间中的名字可以直接引用.


5.查找顺序


6.global

    global语句用来声明一系列变量,这些变量会引用到当前模块的全局命名空间的变量,在函数体外声明的默认就是global

7.nonlocal

    用来在函数或其他作用域中使用外层(非全局)变量

错误示例:

    

def outer():
    num = 10  # 第二歩

    def inner():
        #
       # nonlocal num
        num += 5  # 第四歩
        print(num)  # 第五步

    inner()  # 第三步

    print(num)  # 第六步
    # 5 # 5


outer()  # 第二歩
错误输出
UnboundLocalError: local variable 'num' referenced before assignment

这是由于python对变量的搜索机制引起的:

如果有一个函数内部的变量赋值 ,该变量被认为是本地的,所

以如果有修改变量值就会变成局部变量。

也就是说在num += 5这一行

num被认为是inner函数内部的局部变量,并不是inner里面的,

所以会报错。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值