Python 装饰器
Posted 失望中生活
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 装饰器相关的知识,希望对你有一定的参考价值。
简介:
装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。
1.装饰器的基本使用
# 注意程序运行步骤 def decorator(func): # 这里的参数func其实就是foo函数 def inner(): print("1.程序第一步执行到这里") func() # 这里的func函数其实就是foo函数 print(\'3.这是inner函数\') return inner def foo(): print(\'2.这是foo函数\') foo = decorator(foo) foo()
2.不带参数的装饰器
def decorator(func): # 这里的参数func其实就是foo函数 def inner(): func_name = func.__name__ print("1.程序第一步执行到这里,执行函数名称:",func_name) func() print("3.程序最后运行到这里") print("----------------------------------------------") return inner @decorator # foo = decorator(foo) def foo(): print(\'2.foo..\') @decorator # doo = decorator(doo) def doo(): print(\'2.doo..\') foo() doo()
3.带参数的被装饰的函数
def decorator(func): def inner(a, b): func_name = func.__name__ print("1.程序第一步执行到这里,执行函数名称:", func_name) func(a, b) print("3.程序最后运行到这里") print("----------------------------------------------") return inner @decorator # add = decorator(addnum) # 实现两数相加操作 def addnum(num1, num2): print("2.两数相加结果:",num1 + num2) @decorator # subnum = decorator(subnum) # 实现两数相减操作 def subnum(num1, num2): print("2.两数相减结果:",num1 - num2) addnum(10, 5) subnum(10, 5)
4.带参数的被装饰的函数和装饰器
def decorator_arg(flag=0): def decorator(func): def inner(a, b): func_name = func.__name__ print("1.程序第一步执行到这里,执行函数名称:", func_name) func(a, b) print("3.程序运行到这里") if flag: print("4.传递给装饰器的参数为:",flag) print("----------------------------------------------") return inner return decorator @decorator_arg(2) # add = decorator(addnum) # 实现两数相加操作 def addnum(num1, num2): print("2.两数相加结果:",num1 + num2) @decorator_arg(2) # subnum = decorator(subnum) # 实现两数相减操作 def subnum(num1, num2): print("2.两数相减结果:",num1 - num2) addnum(10, 5) subnum(10, 5)
5.python装饰器总结
def decorator_name(*args,**kwargs): # 定义装饰器,可能带参数 def decorator(func): # 装饰器核心,以被装饰的函数对象为参数,返回装饰后的函数对象 def inner(*args, **kvargs): # 装饰的过程,参数列表适应不同参数的函数 pass # 修改函数调用前的行为 func(*args, **kvargs) # 调用函数 pass # 修改函数调用后的行为 return inner return decorator @decorator_name() # 给函数加上装饰器 def funcname(参数): pass # 自己定义的函数体
以上是关于Python 装饰器的主要内容,如果未能解决你的问题,请参考以下文章