手机
当前位置:查字典教程网 >脚本专栏 >python >python 装饰器功能以及函数参数使用介绍
python 装饰器功能以及函数参数使用介绍
摘要:简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的。例如为了把foo()函数声明成...

简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的。例如为了把foo()函数声明成一个静态函数

复制代码 代码如下:

class Myclass(object):

def staticfoo():

............

............

staticfoo = staticmethod(staticfoo)

可以用装饰器的方法实现:

复制代码 代码如下:

class Myclass(object):

@staticmethod

def staticfoo():

.........

.........

这个例子很明显很容易就可以看懂。

说到这里我们举一个下面的例子,这个例子里面同时涉及到一个重要内容,就是对于python中的函数的本质理解。

代码:

复制代码 代码如下:

# -*- coding: utf-8 -*-

from time import ctime

from time import sleep

def ftfunc(func):

def timef():

print "[%s] %s() called" % (ctime(),func.__name__)

return func()

return timef

@ftfunc

def foo():

print 'hello'

if __name__ == '__main__':

foo()

sleep(2)

for i in range(2):

sleep(1)

foo()

运行这段代码;我们可以看到终端依次会输出以下内容:

python 装饰器功能以及函数参数使用介绍1

其中ftfunc函数是我们自己自定义的一个函数,这个函数是以一个函数作为参数的函数,这也就满足了作为一个装饰器的要求,根据上面我们对于装饰器的等价变换规则,这段代码

复制代码 代码如下:

@ftfunc

def foo():

print 'hello'

可以转换成以下的代码:

复制代码 代码如下:

def foo():

print 'hello'

foo = ftfunc(foo)

再结合上面原来的代码我们很快就可以体会到了装饰器的作用。

但是我在编写这段代码的时候,有一个地方打错了:

这段代码:

复制代码 代码如下:

return func()

return timef

被我写成了:

复制代码 代码如下:

return func

return timef

于是输出结果就是不一样,后来终于发现了一个重要的概念:"foo"是函数对象的引用,而"foo()"是函数对象的调用。关于对象引用是python的重要的基础概念,在python中一切都是对象,同时类型是属于对象,而不是变量。一切的变量只是对象的引用,相当于让这个变量指向这个对象。“foo”正好可以理解成一个变量,只不过是它指向一个函数的对象。而“foo()”是函数对象的调用,即调用这个对象,是要执行这个函数的功能的。这里需要慢慢理解品味。基于此:

这样的一段代码运行结果和刚才是一模一样的。注意比较与刚才那段代码的不同之处,更加有利于理解。

复制代码 代码如下:

# -*- coding: utf-8 -*-

from time import ctime

from time import sleep

def ftfunc(func):

def timef():

print "[%s] %s() called" % (ctime(),func.__name__)

return func

return timef

@ftfunc

def foo():

print 'hello'

if __name__ == '__main__':

foo()()

sleep(2)

for i in range(2):

sleep(1)

foo()()

此代码运行结果:

python 装饰器功能以及函数参数使用介绍2

其实还可以分别对返回的timef函数加上括号,看看结果会是怎么样的。可以更好理解python中函数的概念。

【python 装饰器功能以及函数参数使用介绍】相关文章:

python发腾讯微博代码分享

Python之eval()函数危险性浅析

python连接mongodb操作数据示例(mongodb数据库配置类)

使用python编写脚本获取手机当前应用apk的信息

python发送邮件接收邮件示例分享

Python中的Numpy入门教程

python调用cmd复制文件代码分享

python多线程抓取天涯帖子内容示例

Python 初始化多维数组代码

python实现的二叉树算法和kmp算法实例

精品推荐
分类导航