命名空间的定义

python解释器在加载py文件时在内存中开辟的空间,该空间使用字典来存放对象与值。字典的键保存了py文件中的变量名、方法名、类名及其他环境变量名,对应的值保存了该对象的值(或内存地址或None)。

print(globals())

out:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020FF499EFD0>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'd:/Python/函数/关于函数的案例.py', '__cached__': None}

命名空间的分类

全局(Global names)名称空间

python解释器开始加载py文件时创造的名称空间,存储的对象包括全局变量名、方法名、类名及其他环境变量。

全局名称空间仅有一个。

局部(Local names)名称空间

python解释器在方法、类等执行时才会创建的临时名称空间,存储的对象是该方法或类内部的变量名、方法名等。

局部名称空间可以有多个,方法执行时创建结束后销毁。

方法内可定义方法:外层方法->外层局部名称空间;内层方法->内层局部名称空间。

内置(Built-in names)名称空间

python解释器用来保存内部模块builtins中的方法。

内置名称空间仅有一个。

命名空间的加载顺序

内置(Built-in)名称空间

全局(global)名称空间

局部(local)名称空间

取值顺序->LEGB原则

调用对象时python会按如下顺序查找:

局部(local)名称空间

非本地(Enclosing)名称空间

全局(Global)名称空间

内置(Built-in)名称空间

经过以上四步未能找到该对象名字时就会报错。

在同一个名称空间下,名字和对象是一 一对应的。在不同名称空间下,一个名字可以存在三个对象:局部对象、非本地对象、全局对象,python会按照LEGB原则就近查找。

text = 123

def out():

text = 456

print('out',text)

def inner():

text = 789

print('inner',text)

inner()

out()

print(text)

out:

out 456

inner 789

123

关于Global和nonlocal

在内层方法中可以直接引用全局(Global)名称空间和非本地(Enclosing)名称空间中的对象。

text1 = '全局名称空间变量'

def out():

text2 = '外层名称空间变量'

def inner():

print(text1)

print(text2)

inner()

out()

out:

全局名称空间变量

外层名称空间变量

在内层方法修改全局(Global)名称空间和非本地(Enclosing)名称空间中的对象会报错。

text1 = '全局名称空间变量'

def out():

text2 = '外层名称空间变量'

def inner():

# UnboundLocalError: local variable 'text1' referenced before assignment

text1 += '在内层打印'

# UnboundLocalError: local variable 'text2' referenced before assignment

text2 += '在内层打印'

print(text1)

print(text2)

inner()

out()

如果确实需要修改,必须先声明,然后才能修改。

text1 = '全局名称空间变量'

def out():

text2 = '外层名称空间变量'

def inner():

global text1

nonlocal text2

text1 += '在内层修改'

text2 += '在内层修改'

print(text1)

print(text2)

inner()

out()

out:

全局名称空间变量在内层修改

外层名称空间变量在内层修改

python全局名称空间_python之名称空间知识点整理相关推荐

  1. python全局解释锁_Python GIL 全局解释性锁介绍

    什么是GIL GIL (Global Interpreter Lock),全局解释性锁,它上锁的对象是解释器,而Python代码的运行需要解释器进行解释成字节码并提供虚拟机运行,这么大粒度的锁意味着, ...

  2. python 全局解释器锁_python全局解释器锁(GIL)

    什么是全局解释器锁GIL 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译 ...

  3. sql和python还有c语言_Python语言之原生sql整理

    本文主要向大家介绍了Python语言之原生sql整理,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. mysql -uroot -p #登录mysql命令 password: #输 ...

  4. 学python的注意点_python学习入门细节知识点

    python入门细节 相除后的类型 type(2/2) float type(2//2) int 双斜杠是整除,出来的类型是int.单斜杠的出来的是float类型. 进制表示和转换 进制表示: 二进制 ...

  5. python launcher怎么使用_python的launcher用法知识点总结

    python的launcher用法知识点总结,版本,启动器,文件,范围内,适用于 python的launcher用法知识点总结 易采站长站,站长之家为您整理了python的launcher用法知识点总 ...

  6. python write函数换行_python中文件的知识点总结

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  7. python开发ps插件_python +ps 三方面库整理

    -------------------------------------------端口进程相关------------------------------------------------ cp ...

  8. python元组的概念_python元组的概念知识点

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  9. python中frame用法_python操作dataFrame基本知识点

    1)查看DataFrame数据及属性 df_obj = DataFrame() #创建DataFrame对象 df_obj.dtypes #查看各行的数据格式 df_obj['列名'].astype( ...

最新文章

  1. OpenStack 虚拟机的磁盘文件类型与存储方式
  2. 参数处理:#{}与${}取值的区别
  3. CentOS7.0下Hadoop2.7.3的集群搭建
  4. Django-C003-视图
  5. 利用预渲染加速iOS设备的图像显示
  6. ehcache 在web项目中使用
  7. 初秋最佳运动蓝牙耳机推荐,100-500这几款防水蓝牙耳机可以试试
  8. Skype不能打开解决记录(win7)
  9. 情感分析textblob--英文分析
  10. vue项目路由 Navigating to current location (/xxxx) is not allowed
  11. 毕业设计之 --- 基于java web的物流信息网的设计与实现
  12. mysql中utf8和utf8mb4的详解用法与区别
  13. tabLayout+viewPager+fragment,当tab数目较少,能一屏展示时
  14. Appium多线程自动化----IOS
  15. linux、windows双系统系统盘制作及安装
  16. 排序算法:堆排序(Python)
  17. 监听页面关闭和刷新的总结
  18. 手机软件开发入门 - 中国象棋(2)090311
  19. 打包过程中出现failed to create process.
  20. 灵车上天、骨灰种树,科技公司开始操心你的身后事了!

热门文章

  1. TensorFlow Lite 正式发布,谷歌移动端深度学习框架
  2. Flume实操(三)【实时读取目录文件到HDFS案例】
  3. Spark _15 _广播变量和累加器
  4. leetcode 775. Global and Local Inversions | 775. 全局倒置与局部倒置(Java)
  5. Why is it recommended to create clusters with odd number of nodes? | 为什么集群节点建议奇数个?
  6. Java如何查看死锁?
  7. Spring之装配Bean(一)
  8. leetcode -- 357. Count Numbers with Unique Digits
  9. Leecode02-两数相加——Leecode热题100道系列
  10. 16行代码AC_Keeping Rabbits Gym - 102394K(附超时原因)