博客
关于我
11-Python-作用域和命名空间
阅读量:337 次
发布时间:2019-03-04

本文共 1134 字,大约阅读时间需要 3 分钟。

目录


作用域

  • 作用域:是针对变量而言的,一个变量的作用域总是由在代码中被赋值的地方所决定
  • 搜索顺序: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 spamscope_test()# 局部 赋值(这是默认状态)不会改变 scope_test 对 spam 的绑定。 nonlocal 赋值会改变 scope_test 对 spam 的绑定,而 global 赋值会改变模块层级的绑定。print("In global scope:", spam)  # global spam

 

 

 

 

转载地址:http://nyle.baihongyu.com/

你可能感兴趣的文章
决策树(二)—— ID3和C4.5
查看>>
Leetcode每日随机2021/4/29
查看>>
MySQL~教你满分回答什么是数据库索引? 索引的数据结构是什么? 什么是事务?
查看>>
操作系统~进程的状态、转换、控制
查看>>
操作系统~线程概念以及多线程模型
查看>>
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,时间复杂度均为O(1))
查看>>
Python:函数 ----》装饰器函数
查看>>
Python:面向对象
查看>>
Python练习题 :随机生成一批数
查看>>
Spring源码:prepareBeanFactory(beanFactory);方法
查看>>
Spring源码:initApplicationEventMulticaster源码解析
查看>>
AcWing 786: 第k个数
查看>>
AcWing 798. 差分矩阵
查看>>
AcWing 828. 模拟栈
查看>>
AcWing 845. 八数码(BFS)
查看>>
AcWing 849. Dijkstra求最短路 I(Dijkstra)
查看>>
AcWing 4. 多重背包问题(带有个数限制的完全背包问题dp)
查看>>
EventBus简单Demo实现
查看>>
添加Selinux权限
查看>>
ifconfig网络配置信息解析
查看>>