重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
所谓装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数:你可以试下:
创新互联建站于2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元衡阳县做网站,已为上家服务,为衡阳县各地企业和个人服务,联系电话:18980820575
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def d(fp):
def _d(*arg, **karg):
print "do sth before fp.."
r= fp(*arg, **karg)
print "do sth after fp.."
return r
return _d
@d
def f():
print "call f"
#上面使用@d来表示装饰器和下面是一个意思
#f = d(f)
f()#调用f
追问:
如果装饰器和被装饰的函数还有其他参数呢?
追答:
装饰器带参数:再包装一层
被装饰的函数还有其他参数:上面的例子包装函数就是接收任意形式的参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding: cp936 -*-
def d(a):
def _d(fp):
def __d(*arg, **karg):
print a
print "do sth before fp.."
r= fp(*arg, **karg)
print "do sth after fp.."
return r
return __d
return _d
@d("haha")
def f():
print "call f"
@d("hehe")
def f2(a, b=2):
print "call f2"
print a+b
f()
print "-"*20
f2(1)
print "-"*20
f2(a=1,b=4)
一、指代不同
1、Python IDLE:是Python的集成开发环境 ,自1.5.2b1以来已与该语言的默认实现捆绑在一起。
2、python:是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言。
二、用处不同
1、Python IDLE:被打包为Python包装的可选部分,包含许多Linux发行版 。 完全用Python和Tkinter GUI工具包编写( Tcl / Tk的 包装函数)。
2、python:被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
三、特点不同
1、Python IDLE:是开发 python 程序的基本IDE(集成开发环境),具备基本的IDE的功能,是非商业Python开发的不错的选择。
2、python:在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。
参考资料来源:百度百科-Python
参考资料来源:百度百科-Idle
注意:这种发方法并不是装饰器最常用的功能,但是在降低代码重复上可谓是首屈一指。比如:如果不使用装饰器,上述代码可能会很多:
当然,这里也有一个潜在的风险,就是当装饰器包裹的函数已经用了debug作为参数名,那么装饰器这里将会报错,所以要添加额外的一些判断来完善代码:
最后还剩下一部分比较难理解的地方,我将理解的注释在每行代码上方,这个问题就是,在打印被修饰函数的参数签名时,其实并不能正确显示参数签名,原因是因为被wrapper修饰过后的函数实际上应该使用的是wrapper的参数签名表,例如:
所以,接下来,完成最后最难的一步: