博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-作用域
阅读量:5260 次
发布时间:2019-06-14

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

什么是命名空间

比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就很明确了,那么此时的7班就是小王所在的范围,即命名空间

globals、locals

在之前学习变量的作用域时,经常会提到局部变量和全局变量,之所有称之为局部、全局,就是因为他们的自作用的区域不同,这就是作用域

locals

globals:

 

LEGB 规则

Python 使用 LEGB 的顺序来查找一个符号对应的对象

locals -> enclosing function -> globals -> builtins

locals,当前所在命名空间(如函数、模块),函数的参数也属于命名空间内的变量

enclosing,外部嵌套函数的命名空间(闭包中常见)

def fun1():  a = 10  def fun2():      # a 位于外部嵌套函数的命名空间      print(a)

globals,全局变量,函数定义所在模块的命名空间

a = 1def fun():  # 需要通过 global 指令来声明全局变量  global a  # 修改全局变量,而不是创建一个新的 local 变量  a = 2

builtins,内建模块的命名空间。

Python 在启动的时候会自动为我们载入很多内建的函数、类,  比如 dict,list,type,print,这些都位于 __builtin__ 模块中,  可以使用 dir(__builtin__) 来查看。  这也是为什么我们在没有 import任何模块的情况下,  就能使用这么多丰富的函数和功能了。  在Python中,有一个内建模块,该模块中有一些常用函数;在Python启动后,  且没有执行程序员所写的任何代码前,Python会首先加载该内建函数到内存。  另外,该内建模块中的功能可以直接使用,不用在其前添加内建模块前缀,  其原因是对函数、变量、类等标识符的查找是按LEGB法则,其中B即代表内建模块  比如:内建模块中有一个abs()函数,其功能求绝对值,如abs(-20)将返回20。

 

转载于:https://www.cnblogs.com/loveyouyou616/p/7514712.html

你可能感兴趣的文章
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>