【python3基础学习】【第3周】装饰器

本文主要介绍Python3中的装饰器,包括装饰器的概念、原则,以及从简易到进阶的装饰器实现。内容涵盖函数与变量、高阶函数、嵌套函数,并通过代码示例详细讲解了装饰器的使用,特别是带参数装饰器的调用方法。同时,提供了多个视频教程链接以辅助理解。

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



前言

实现装饰器的知识储备:

  1. 函数及"变量"
  2. 高阶函数
  3. 嵌套函数

总体:高阶函数 + 嵌套函数 >>>> 装饰器


一、装饰器概念/原则

  • 概念:
    本质是函数,装饰其他函数,就是为其他函数添加附加功能
  • 原则:
  1. 不能修改被装饰的函数的源代码;
  2. 不能修改被装饰的函数的调用方式;
  3. 总而言之,装饰器不影响被装饰的函数;

二、函数及"变量"

1. 函数定义与变量定义对比

  • def 函数名(): 函数体,可以认为基本相当于 x = 1;
  • 如果在没有def声明函数前,调用函数,相当于没有定义变量x=1前,print(x);
  • 可以结合此处图片,查看下方示例;

在这里插入图片描述

2. 函数定义与执行 >>> 示例

示例1
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason

def func1():
    print("in the func1")


def func2():
    func1()
    print("in the func2")


if __name__ == '__main__':
    func2()
    
# 输出:
in the func1
in the func2
示例2
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason

def func2():
    func1()
    print("in the func2")


def func1():
    print("in the func1")


if __name__ == '__main__':
    func2()

# 输出:
in the func1
in the func2
示例3
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason

def func2():
    func1()
    print("in the func2")


func2()


def func1():
    print("in the func1")

# 输出:
Traceback (most recent call last):
  File "D:\Codes\s14_python3\def_learning.py", line 10, in <module>
    func2()
  File "D:\Codes\s14_python3\def_learning.py", line 6, in func2
    func1()
NameError: name 'func1' is not defined

三、高阶函数

  • 注意:
    高阶函数传函数名时,实参不能传入"函数名+()"的形式,这么调用就代表传入的实参不是函数名,而是该传入函数执行完后return的结果
  • 高阶函数一共有两种:
  1. 把一个函数名当作实参,传给另外一个函数,此时接收函数名为实参的函数;
    — >>> 在不修改被装饰函数源代码的情况下,为其添加功能
    在这里插入图片描述
  1. 返回值中包含函数名的函数;
    — >>> 不修改函数的调用方式
    在这里插入图片描述

四、嵌套函数

  • 定义:
    在一个函数体内部,使用def声明函数,才叫嵌套函数,一个函数内不def声明另一个函数,直接调用外部定义的函数叫函数调用,不叫函数嵌套;
  • 内嵌函数使用范围:
    不能在外部调用函数内部定义的函数,函数内部定义的函数只能在函数内部调用,且外部函数调用时才能一并调用,如下图;
    在这里插入图片描述
    在这里插入图片描述
  • </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值