示例代码

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__': <module '__builtin__' (built-in)>, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo': <function foo at 0x7fc75b416cf8>, '__doc__': None}
{'i': 66}
{'__builtins__': <module '__builtin__' (built-in)>, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo': <function foo at 0x7fc75b416cf8>, '__doc__': None}
{'x': 99, 'self': <__main__.demo instance at 0x7fc75b412dd0>}
{'__builtins__': <module '__builtin__' (built-in)>, 'demo': <class __main__.demo at 0x7fc75b3fece8>, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo': <function foo at 0x7fc75b416cf8>, '__doc__': None}
{'x': 99, 'self': <__main__.demo instance at 0x7fc75b412dd0>}
{'__builtins__': <module '__builtin__' (built-in)>, 'demo': <class __main__.demo at 0x7fc75b3fece8>, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo': <function foo at 0x7fc75b416cf8>, '__doc__': None}
6666
666
6
{'__builtins__': <module '__builtin__' (built-in)>, 'demo': <class __main__.demo at 0x7fc75b3fece8>, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo': <function foo at 0x7fc75b416cf8>, '__doc__': None}
{'__builtins__': <module '__builtin__' (built-in)>, 'demo': <class __main__.demo at 0x7fc75b3fece8>, '__file__': '/home/cyborg/PycharmProjects/untitled1/de.py', '__package__': None, 'i': 6, '__name__': '__main__', 'foo': <function foo at 0x7fc75b416cf8>, '__doc__': None}

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

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

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

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

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

        print self.i
print demo.i
print i

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

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

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

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

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

最新文章

  1. 4种scope方法
  2. Super Jumping! Jumping! Jumping!——E
  3. mysql查询结果导出到文件
  4. python中的md5加密
  5. [JS]鼠标事件穿透的问题
  6. Java 图片转换为字符图 CharMaps (整理)
  7. IE无法打开internet网站已终止操作的解决的方法
  8. 【充电器】小米手机2S电池座充——小米手机官网
  9. Codeforces 570E - Pig and Palindromes - [滚动优化DP]
  10. JS代码段:返回yyyy-mm-dd hh:mm:ss
  11. eclipse插件wordwrap
  12. BZOJ3545&amp;3551[ONTAK2010]Peaks——kruskal重构树+主席树+dfs序+树上倍增
  13. 原根的存在性及个数证明(Primitive Root Theorem)
  14. Linux 系统信息查询
  15. 微信小程序独家秘笈之左滑删除
  16. platforms
  17. 057——VUE中vue-router之路由参数默认值的设置
  18. Python 中函数和方法
  19. FP寻源报错
  20. 20145202马超《JAVA》预备作业1

热门文章

  1. Spring Boot的properties配置文件读取
  2. 实现UDP高效接收/响应
  3. 小白审计JACKSON反序列化漏洞
  4. datatables 学习笔记1 基础篇
  5. 用hmmlearn学习隐马尔科夫模型HMM
  6. Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法
  7. css清除浮动的集中方法
  8. 使用CSS3动画实现绚丽的照片墙效果
  9. Redis数据类型之Set
  10. markdown基础