注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淘尽网 官方博客

淘尽网http://www.tao3w.com做最好的比价网站

 
 
 

日志

 
 
关于我

淘尽网 http://www.tao3w.com 做最好的比价网站,做最好的数据抓取专家。

网易考拉推荐

@ python的修饰符  

2013-07-06 20:06:17|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
@符号在python语言中具有特殊含义,用来作为修饰符使用。
具体可以参考下面的代码:

复制代码
#! /usr/bin/env python
#
coding=utf-8

from time import ctime, sleep

def tcfunc(func):
    
def wrappedFunc():
        
print '[%s] %s() called' %(
            ctime(), func)
        
return func()
    
print "in tcfunc called"
    
print "wrapped func %s" %wrappedFunc
    
return wrappedFunc

# decorator 仅调用tcfunc函数,该函数将foo作为一个参数,返回一个
#
 wrappedFunc函数对象,用该对象来取代foo函数在外部的调用,foo
#
 定义的函数只能够在内部进行调用,外部无法获取其调用方式!!
@tcfunc         # call sequence is : tcfunc(func) --> wrappedFunc -- > func
def foo():
    
print "in foo called"
    
pass

print "foo func : %s" %foo

foo()  
print "-"*100
sleep(
4)

for i in range(2):
    sleep(i)
    foo()
    
print "-"*100

上面函数中,tcfunc定义了一个函数,里面内嵌一个函数,该函数需要一个func的参数。

@tcfunc则表示下面定义的函数将函数名作为tcfunc的参数被tcfunc调用。
代码:
@tcfunc
def foo():
    
pass

在定义的时候,就被tcfunc调用,即tcfunc(foo),该函数返回一个wrappedFunc对象,而该定义foo函数名对象其实已经被wrappedFunc对象给取代, foo()定义的函数只在tcfunc函数内部作为参数被使用!我们可以通过打印它们的地址来查看tcfunc外部调用的foo与wrappedFunc是否为同一个对象:

in tcfunc called
wrapped func <function wrappedFunc at 0x01A3DD30>
foo func : <function wrappedFunc at 0x01A3DD30>
[Thu Jan 08 00:04:35 2009] <function foo at 0x01A3DCF0>() called
in foo called
----------------------------------------------------------------------------------------------------
[Thu Jan 08 00:04:39 2009] <function foo at 0x01A3DCF0>() called
in foo called
----------------------------------------------------------------------------------------------------
[Thu Jan 08 00:04:40 2009] <function foo at 0x01A3DCF0>() called
in foo called
----------------------------------------------------------------------------------------------------
复制代码

从中可以看到,在tcfunc外部的函数对象与wrappedFunc的函数对象是同一个对象,在tcfunc内部参数func中调用的
才是实际定义的foo函数对象!!!
  评论这张
 
阅读(359)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017