关于Python3装饰器,很多资料没有提到的一点

遇到装饰器,算是一个难点。网上的博文转载的居多,实际动手实践的少。有些代码居然编译不通过,我也是醉了。

先上代码:

#!/usr/bin/env python3
#coding=utf-8
################################################ 
# File Name: p609.py
# Author: Yu LingJun
# mail: 16090222@qq.com
# Created Time: 2018-09-25
################################################ 
def decorator(func):
    def wrapper(*arg,**kw):
        print('执行装饰器内部的内容,最内层嵌套%s'%(func.__name__))
        return func(*arg,**kw)
    print('执行装饰器内部的内容,执行外层嵌套') #这条语句只在装饰器第一次调用时执行。
    return wrapper

@decorator
def addp(x,y,z=0):
    print('执行原函数')
    print('%d'%(x+y+z))
    return x+y+z
addp(1,3)
y=addp(1,4)
print('y=%d'%y)
y=addp(2,4)
print('y=%d'%y)

 结果为:

  2 || 执行装饰器内部的内容,执行外层嵌套
  3 || 执行装饰器内部的内容,最内层嵌套addp
  4 || 执行原函数
  5 || 4
  6 || 执行装饰器内部的内容,最内层嵌套addp
  7 || 执行原函数
  8 || 5
  9 || y=5
 10 || 执行装饰器内部的内容,最内层嵌套addp
 11 || 执行原函数
 12 || 6
 13 || y=6
 14 || [Finished in 0 seconds]

可以发现,装饰器函数最外层的语句执行了一次。而装饰器嵌套的函数则每次都执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值