博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于locals()、globals()以及作用域的一些感悟
阅读量:6081 次
发布时间:2019-06-20

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

示例代码

i=6 def foo(): print locals() print globals() i=66 print locals() print globals() class demo: i=666 def f(self,x=99): print locals() print globals() self.i=6666 print locals() print globals() print self.i print demo.i print i foo() demo().f() print globals() print locals()

 运行结果:

{}{
'__builtins__':
, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo':
, '__doc__': None}{
'i': 66}{
'__builtins__':
, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo':
, '__doc__': None}{
'x': 99, 'self': <__main__.demo instance at 0x7fc75b412dd0>}{
'__builtins__':
, 'demo':
, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo':
, '__doc__': None}{ 'x': 99, 'self': <__main__.demo instance at 0x7fc75b412dd0>}{ '__builtins__':
, 'demo':
, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo':
, '__doc__': None}66666666{ '__builtins__':
, 'demo':
, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo':
, '__doc__': None}{ '__builtins__':
, 'demo':
, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo':
, '__doc__': None}

1.在模块级别上局部作用域与全局作用域相同,模块作用是最高的了,局部作用域就是全局的了。

2.作用域是函数据以执行的环境的上下文,换句话说作用域是针对函数而言的,这样就有了全局(外部)和局部之分了,Python中一切都为对象,作用域从另一角度就是属性对象的集合。

3.解释器在解析模块的过程中就会将模块中模块的属性以对象为单位加入到模块的最高的本地(全局)作用域中。

4.作用域的结构就是一个树形结构,模块为根,形成了命名空间。

5.函数的参数和函数内的变量(具有局部性)会加入局部作用域中。上述代码中类对象被加入了全局作用域,类生成的对象self被加入了函数的具部作用域,因为self是成员函数的一个参数。

print self.i        print demo.i        print i

这三行打印出的结果不同:

第一行打印的局部变量self的属性

第二行打印的是全局变量demo的属性

第三行答应的是局部变量i

放入作用域的中是每个结点(相当于root)下的次层的结点,通过.访问结点的属性字典,每个对象都有一个属性字典,这样一层层进行访问,这样就形成了命名空间。

转载于:https://www.cnblogs.com/baishoujing/p/6362420.html

你可能感兴趣的文章
《ELK Stack权威指南(第2版)》一3.6 Java日志
查看>>
CSS3 transforms 3D翻开
查看>>
java基础---->正则表达式
查看>>
2.2013/06/13_log(n)+1
查看>>
关于加载iframe时进度条不消失的问题
查看>>
poj 3984迷宫问题【广搜】
查看>>
oracle ORA-01840:输入值对于日期格式不够长
查看>>
python基础知识~logger模块
查看>>
SIP入门(二):建立SIPserver
查看>>
Servlet3.0的异步
查看>>
WebService连接postgresql( 失败尝试)
查看>>
从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?...
查看>>
Python-MacOSX下SIP引起的pip权限问题解决方案(非取消SIP机制)
查看>>
从MFQ方法到需求分析
查看>>
android.view.WindowManager$BadTokenException: Unable to add window
查看>>
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>
Linux下MEncoder的编译
查看>>
Javascript中闭包(Closure)的探索(一)-基本概念
查看>>
spark高级排序彻底解秘
查看>>