学习python装饰器_深入浅出学习python装饰器

之前就了解到了装饰器, 但是就会点皮毛, 而且对其调用方式感到迷茫,正好现在的项目我想优化,就想到了用装饰器, 因此深入研究了下装饰器.

先看下代码:

import time

# 将函数作为参数传入到此方法....

def timeif(func):

def wrapper(arg):

print("in wrapper() %s" % (arg))

start = time.clock()

func(arg)

end = time.clock()

print("used: %s %s" % (end-start, arg))

return wrapper

@timeif

def foo(arg):

print("in foo() %s" % (arg))

if __name__ == '__main__':

foo(" Hello ") # 表示执行foo函数....

我的疑惑就是明明return 的是一个函数名,按道理来讲,返回的就是一个函数地址啊!我理解有问题?随后上网查资料,又是闭包....但是我个人对它不感冒,随后自己分析,总结出了一段程序,看完你就知道原因了.

程序:

# coding=utf-8

# 带参数的函数 返回一个函数地址就行....

def funX(x):

def funY():

return x

return funY

# 不带参数的函数....

def funX1():

print("调用函数funX1")

def funY1():

print("调用函数funY1")

return funY1

if __name__ == '__main__':

# print(funX(5)()) # 调用有参数的嵌套函数...

print(funX1()()) # 调用无参数的嵌套函数...

这和我们的装饰器不像吗?这就是我们的装饰器!因此,我们可以按照上面的程序来理解,也就是说它是首先确定参数个数,随后分别传入的,下面,我们来改写代码:

# coding=utf-8

import time

# 将函数作为参数传入到此方法....

def timeif(func):

def wrapper(arg):

print("in wrapper() %s" % (arg))

start = time.clock()

func(arg)

end = time.clock()

print("used: %s %s" % (end-start, arg))

return wrapper

# @timeif

def foo(arg):

print("in foo() %s" % (arg))

if __name__ == '__main__':

timeif(foo)(' Hello')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: 深入浅出学习python装饰器

本文地址: http://www.cppcns.com/jiaoben/python/205713.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值