11-Python-作用域和命名空间

本文详细介绍了Python编程中的作用域和命名空间概念。作用域决定了变量的可见性和生命周期,遵循LEGB原则;命名空间则是一个字典结构,存储变量名和其对应的值。局部、全局和内建命名空间分别对应函数内部、模块级别和内置函数的变量。通过`nonlocal`和`global`关键字,可以在不同作用域中操作变量。示例代码展示了这些概念的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

作用域

命名空间

二者之间关系

代码示例


作用域

  • 作用域:是针对变量而言的,一个变量的作用域总是由在代码中被赋值的地方所决定
  • 搜索顺序:LEGB原则(局部作用域、嵌套作用域、全局作用域、内建作用域)

命名空间

  • 命名空间:名称到对象的映射。是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立的。一个命名空间中不能有重名。

    按变量定义位置分

  • 局部命名空间:每个函数所拥有的命名空间,记录函数中定义的所有变量
  • 全局命名空间:每个模块加载执行时创建的,记录模块中定义的变量
  • 内建命名空间:自带的,任何模块均可以访问,放着内置函数和异常

二者之间关系

  • 命名空间定义了在某个作用域内变量和绑定值之间的关系,是键值对的集合,变量名和值一一对应,以字典的形式存在
  • 作用域定义了命名空间中的变量能够在多大的范围起作用,解释器定义的一种规则,确定运行时变量查找的顺序、

代码示例

# -*- coding: utf-8 -*-
# @Time    : 2021/4/8
# @Author  : 大海

def scope_test():
    def do_local():
        spam = "local spam"

    def do_nonlocal():
        # nonlocal 语句表明特定变量生存于外层作用域中并且应当在其中被重新绑定
        nonlocal spam
        spam = "nonlocal spam"

    def do_global():
        # global 语句可被用来表明特定变量生存于全局作用域并且应当在其中被重新绑定
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local()
    print("After local assignment:", spam)  # test spam
    do_nonlocal()
    print("After nonlocal assignment:", spam)  # nonlocal spam
    do_global()
    print("After global assignment:", spam)  # nonlocal spam


scope_test()
# 局部 赋值(这是默认状态)不会改变 scope_test 对 spam 的绑定。 nonlocal 赋值会改变 scope_test 对 spam 的绑定,而 global 赋值会改变模块层级的绑定。
print("In global scope:", spam)  # global spam

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习de测试小白

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值