Python 元编程 - 装饰器

本文介绍了Python装饰器的基本概念和原理,包括如何处理带参数的函数、装饰器自身需要参数的情况,以及如何保留原函数信息。同时探讨了装饰器的嵌套使用和常见应用场景,如日志记录和作为缓存。通过学习,读者将掌握装饰器在Python元编程中的作用。
摘要由CSDN通过智能技术生成

Python 中提供了一个叫装饰器的特性,用于在不改变原始对象的情况下,增加新功能或行为。

这也属于 Python "元编程" 的一部分,在编译时一个对象去试图修改另一个对象的信息,实现 "控制一切" 目的。

本篇文章作为装饰器的基础篇,在阅读后应该了解如下内容:

  • 装饰器的原理?
  • 装饰器如何包裹有参数的函数?
  • 装饰器本身需要参数怎么办?
  • 被装饰器修饰的函数还是原函数吗,怎么解决?
  • 装饰器嵌套时的顺序?
  • 装饰器常见的应用场景?

装饰器原理

在具体装饰器的内容前,先来回顾下 Python 中的基本概念:

1. Python 中,一切都是对象,函数自然也不例外

python 中的对象都会在内存中用于属于自己的一块区域。在操作具体的对象时,需要通过 “变量” ,变量本身仅是一个指针,指向对象的内存地址。

函数作为对象的一种,自然也可以被变量引用。

def hello(name: str):
    print('hello', name)
hello('Ethan')

alias_func_name = hello
alias_func_name('Michael')
# hello Ethan
# hello Michael

alias_func_name 作为函数的引用,当然也可以作为函数被使用。

2. 函数接受的参数和返回值都可以是函数

def inc(x):
    return x + 1

def dec(x):
    return x - 1

def operate(func, x):
    result = func(x)
    return result
    
operate(inc,3)
# 4
operate(dec,3)
# 2

这里 operate 中接受函数作为参数,并在其内部进行调用。

3. 嵌套函数

def increment():
    def inner_increment(number):
        return 1 + number
    return inner_increment()

print(increment(100)) # 101

在 increment 内部,实现对 number add 1 的操作。

回头再来看下装饰器的实现:

# def decorator
def decorator_func(func):
    print('enter decorator..')
    def wrapper():
        print('Step1: enter wrapper func.')
        return func()
    return wrapper

# def target func
def normal_func():
    print("Step2: I
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值