最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:17:31
文档

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

python装饰器功能以及函数参数使用介绍:简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的。例如为了把foo()函数声明成一个静态函数 代码如下: class Myclass(object): def staticfoo(): ............ .....
推荐度:
导读python装饰器功能以及函数参数使用介绍:简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的。例如为了把foo()函数声明成一个静态函数 代码如下: class Myclass(object): def staticfoo(): ............ .....


简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的。例如为了把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()


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


其中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()()


此代码运行结果:

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

文档

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

python装饰器功能以及函数参数使用介绍:简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的。例如为了把foo()函数声明成一个静态函数 代码如下: class Myclass(object): def staticfoo(): ............ .....
推荐度:
标签: 用法 介绍 函数
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top