首页 > 编程语言 > 详细

python装饰器

时间:2017-01-19 11:08:35      阅读:224      评论:0      收藏:0      [点我收藏+]

学习装饰器前,我们先了解三个概念:作用域、函数(嵌套)、闭包。

 

作用域

作用域简单说就是一个变量的命名空间。代码中变量被赋值的位置,就决定了哪些范围的对象可以访问这个变量,这个范围就是命名空间。python赋值时生成了变量名,当然作用域也包括在内。

在函数外,一段代码最始开所赋值的变量,它可以被多个函数引用,这就是全局变量

在函数内定义的变量名,只能被函数内部引用,不能在函数外引用这个变量名,这个变量的作用域就是局部的,也叫它为局部变量 ;

如果函数内的变量名与函数外的变量名相同,也不会发生冲突。

x = 66

def func():
    x = 88

x = 66这个赋值语句所创建的变量X,作用域为全局变量;

x = 88这个赋值语句所创建的变量X,它的作用域则为局部变量,只能在函数func()内使用。

尽管这两个变量名是相同的,但它的作用域为它们做了区分。作用域在某种程度上也可以起到防止程序中变量名冲突的作用。

 

在 Python 函数中会创建一个新的作用域。也就是说,当在函数体中遇到变量时,Python 会首先在该函数的命名空间中寻找变量名。Python 有几个函数用来查看命名空间。下面来写一个简单函数来看看局部变量和全局变量的区别。

>>> a_string = "This is a global variable"
>>> def foo():
...     print locals()
...
>>> print globals()
{‘__builtins__‘: <module ‘__builtin__‘ (built-in)>, ‘a_string‘: ‘This is a global variable‘, ‘__package__‘: None, ‘__name__‘: ‘__main__‘, ‘foo‘: <function foo at 0x00000000022DDAC8>, ‘__doc__‘: None}
>>> foo()
{}

内建函数 globals 返回一个包含所有 Python 能识别变量的字典。

调用了 foo 函数,在函数中打印局部变量的内容。从中可以看到,函数 foo 有自己单独的、此时为空的命名空间。

 

总结:

1、变量的作用域由代码被赋值的位置所决定

2、变量可以在3个不同地方,对应3种不同作用域:

  • 一个变量在函数内赋值,它的作用范围被定位在函数之内;
  • 变量在函数外赋值,它作用域就是当前整个文件的全局变量;
  • 当变量是在一个嵌套的函数中赋值时,对于这个嵌套的函数来说,这个变量是非本地的。

 

函数(嵌套)

 

python装饰器

原文:http://www.cnblogs.com/shhnwangjian/p/6305750.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!