专栏首页python3Python 装饰器简单示例

Python 装饰器简单示例

简单装饰器示例:

def servlet(func):
    print("into servlet")#1
    print(servlet)#2
    def foo():
        print("into foo")#7
        print(func)#8,真正的bar函数
        func()#9
        print("out foo")#13
    print(foo)#3
    print("out servlet")#4
    return foo
@servlet
def bar():
    print("in old bar")/#0
    print(bar)#11
    print("out old bar")#12
print(bar)#5,已经被装饰器装饰了
bar()#6

执行顺序如上,执行结果如下

into servlet
<function servlet at 0x00000186A1341E18>
<function servlet.<locals>.foo at 0x00000186A1801E18>
out servlet
<function servlet.<locals>.foo at 0x00000186A1801E18>
into foo
<function bar at 0x00000186A1801AE8>
in old bar
<function servlet.<locals>.foo at 0x00000186A1801E18>
out old bar
out foo

Process finished with exit code 0

可变参数装饰器示例:

def desc(func):
    print("in desc")
    print(desc)
    def foo(*arg1,**arg2):
        print("in foo")
        print(func)
        x = func(*arg1,**arg2)
        print("out foo")
        return x
    print(foo)
    print("out desc")
    return foo
@desc
def setArg1(x,y):
    print("in setArg1")
    print(setArg1)
    print("out setArg1")
    return x + y
@desc
def setArg2(x,y,z):
    print("in setArg2")
    print(setArg2)
    print("out setArg2")
    return x + y + z
print(setArg1)
print(setArg2)
x = setArg1(100,200)
y = setArg2(100,200,300)
print(x)
print(y)

代码如上,执行结果如下

in desc
<function desc at 0x0000024DF2611E18>
<function desc.<locals>.foo at 0x0000024DF2AD1E18>
out desc
in desc
<function desc at 0x0000024DF2611E18>
<function desc.<locals>.foo at 0x0000024DF2AD1EA0>
out desc
<function desc.<locals>.foo at 0x0000024DF2AD1E18>
<function desc.<locals>.foo at 0x0000024DF2AD1EA0>
in foo
<function setArg1 at 0x0000024DF2AD1AE8>
in setArg1
<function desc.<locals>.foo at 0x0000024DF2AD1E18>
out setArg1
out foo
in foo
<function setArg2 at 0x0000024DF2AD1A60>
in setArg2
<function desc.<locals>.foo at 0x0000024DF2AD1EA0>
out setArg2
out foo
300
600

Process finished with exit code 0

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python全栈学习_day003知识点

    py3study
  • python编程之函数思想

    py3study
  • 【Python3】Python函数

    作用域即范围(作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关) 查看作用域:globals(),locals()

    py3study
  • 新手学习Python2和Python3中print不同的用法

    在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异

    砸漏
  • Python全栈学习_day003知识点

    py3study
  • python编程之函数思想

    py3study
  • Python中浅拷贝与深拷贝的骚操作

    为什么同样是list3 = list1[:] 执行list1.sort() 操作,list3不发生变化 执行list1[0][0] = 111 操作,list...

    统计学家
  • 一步一步学Python(3) 基础补充

    最近在系统学习Python,以MOOC上面的一套Python3的课程为基础。本文主要总结一下基础部分的关键点。

    Alfred Zhao
  • 【Python3】Python函数

    作用域即范围(作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关) 查看作用域:globals(),locals()

    py3study
  • python基础四

    首先思考一个问题,什么类型是可以for循环的。你会说有list,tuput,str,dict,set等等。他们有一个共性,就是都含有__iter__方法。说明他...

    不断折腾

扫码关注云+社区

领取腾讯云代金券