python decorator for function

本文深入探讨了Python中装饰器的使用方法,包括无参数和带参数的装饰器实现细节,通过具体示例展示了装饰器如何增强或修改函数行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、描述

@decorator(num): 带参数, 2层包装

@decorator: 不带参数, 一层包装

在函数上方加@decorator, 在函数定义处开始执行 decorator 至 wrapper

在函数调用时, 执行wrapper和函数部分

二、代码

# -*- coding: utf-8 -*-
import functools


def decorator(func):
    print("decorator begin...")
    print('func = %s' % func)

    def wrapper(name, *args, **kwargs):
        print('wrapper begin...')
        print('func begin...')
        func(name, *args, **kwargs)
        print('func end...')
        print('wrapper end...')
    print("decorator end...")
    return wrapper


def decorator1(param):
    print('decorator1 begin...')
    print('param = %s' % param)

    def decorator(func):
        print("decorator begin...")
        print('func = %s' % func)

        @functools.wraps(func)
        def wrapper(name, *args, **kwargs):
            print('wrapper begin...')
            print('func begin...')
            func(name, *args, **kwargs)
            print('func end...')
            print('wrapper end...')

        print("decorator end...")
        return wrapper
    return decorator


print('decorator1 for my_func1 begin...')
@decorator1(100)
def my_func1(name, age, info=dict()):
    print('my_func begin...')
    print('name = %s' % name)
    print('age = %s' % age)
    print('info[name] = %s' % info.get('name'))
    print('my_func end...')


print('decorator1 fun my_func1 end...')
print('= = ' * 30)
print('decorator fun my_func begin...')
@decorator
def my_func(name, age, info=dict()):
    print('my_func begin...')
    print('name = %s' % name)
    print('age = %s' % age)
    print('info[name] = %s' % info.get('name'))
    print('my_func end...')


print('decorator for my_func end...')
print('= = ' * 30)
print('main...')

if __name__ == '__main__':
    my_func(name='tom', age=18, info={'name': 'jack'})
    print('- - ' * 30)
    info = {'name': 'jim'}
    my_func(age=19, **info)
    print('my_func name = %s ' % my_func.__name__)

    print('* * ' * 30)
    my_func1(name='jack1', age=20)
    print('my_func1 name %s' % my_func1.__name__)
    print('hello world')
    pass

三、输出

decorator1 for my_func1 begin...
decorator1 begin...
param = 100
decorator begin...
func = <function my_func1 at 0x00000185759A0AE8>
decorator end...
decorator1 fun my_func1 end...
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
decorator fun my_func begin...
decorator begin...
func = <function my_func at 0x00000185759A0A60>
decorator end...
decorator for my_func end...
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
main...
wrapper begin...
func begin...
my_func begin...
name = tom
age = 18
info[name] = jack
my_func end...
func end...
wrapper end...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
wrapper begin...
func begin...
my_func begin...
name = jim
age = 19
info[name] = None
my_func end...
func end...
wrapper end...
my_func name = wrapper 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
wrapper begin...
func begin...
my_func begin...
name = jack1
age = 20
info[name] = None
my_func end...
func end...
wrapper end...
my_func1 name my_func1
hello world
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值