python函数修饰器定义不调用、会执行吗_Python/函数装饰器概念(详解)

2023-11-14

Python中装饰器的概念

装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。 首先,让我们讨论下如何写你自己的装饰器。

这可能是最难掌握的概念之一。我们会每次只讨论一个步骤,这样你能完全理解它。

以上来自菜鸟教程

装饰器本身就是一个函数,它只不过是对另外一个函数进行了一次封装,它能够把那个函数的功能进行一个强化

例如1:

#!/usr/bin/env python

def day1():

print("My function name is:", day1.__name__)

def main():

day1()

if __name__ == "__main__":

main()

>>> My function name is: day1

在以上代码块中定义了一个函数为:day1, 输出一句话为:My function name is: day1,那么装饰器能够把原来的函数功能上进行一个强化的操作。 在以上函数中输出了一句话,若我们需要在输出一句话如:hello world 若没装饰器 如下:

#!/usr/bin/env python

def day1():

print("hello world")

print("My function name is:", day1.__name__)

def main():

day1()

if __name__ == "__main__":

main()

>>>

hello world

My function name is: day1

若有装饰器如下:

#!/usr/bin/env python

def day2(func):

print("hello world")

return func

@day2

def day1():

print("My function name is:", day1.__name__)

def main():

day1()

if __name__ == "__main__":

main()

>>>

hello world

My function name is: day1

在以上代码块中出现了@符号,以及day2函数,现在不用管它是什么意思,以上代码已经实现了装饰器对原来的函数功能进行了一次强化,但是在第一个代码块中只需要加一句话就可以实现,但是在第二个代码中还需要在写一个函数,感觉会非常麻烦,但是如果被强化的函数有1万个,难道需要一行行去添加吗?,很显然是不可以的,所以接下来开始讲解装饰器。

一、装饰器定义

加粗样式 在定义装饰器之前首先我们需要有一个函数,因为装饰器是对函数进行了一次封装同时对函数进行强化的作用。

1.1、定义一个函数

def tony():

print("my function name is:", tony.__name__) # 每一个函数的名字都可以自带一个变量:__name__就是函数名它自己

def main():

tony()

if __name__ == "__main__":

main()

> my function name is: tony # 输出内容

1.2、使用装饰器对tony函数进行增强操作

#!/usr/bin/env python

def deco_iron(func):

print("开始运行:", deco_iron.__name__)

return func

def tony():

print("my function name is:", tony.__name__)

def main():

tony()

if __name__ == "__main__":

main()

将tony函数传入deco_

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python函数修饰器定义不调用、会执行吗_Python/函数装饰器概念(详解) 的相关文章

  • 数据结构之算法复杂度篇

    要努力 但是不要急 繁花锦簇 硕果累累都需要过程 目录 前言 1 什么是数据结构 2 什么是算法 3 算法的复杂度 1 概念 2 时间复杂度 3 空间复杂度 4 常见的复杂度对比 4 复杂度的oj练习 5 总结 前言 在程序段运行的时候 我
  • 将h5封装为微信小程序

    1 要求网站域名必须为https 2 登录微信公众号好注册一个小程序账号 3 打开威胁你开发者工具进行创建 4 打开app json文件 pages项只保留 pages index index 这一行 5 打开 pages index in
  • 【千律】C++基础:类定义和类实现的分离

    类定义就是指定义类名 是 h文件 类实现是指对类定义的具体实现 是 cpp文件 下面是Student h中的内容 pragma once include
  • frc机器人比赛主题_参加了十几场机器人竞赛后,我才敢告诉你:怎样做到不“踩坑”?...

    在决定参加比赛之前 先问自己为什么 为什么要先聊这一点 因为这个问题会决定你的很多选择 很多家长会先去看那个 果 比如 比赛获奖有没有用 这个比赛含金量如何 但是这个 因 是每个家长要先问自己的 你是不是认同机器人竞赛是对孩子综合能力的提升
  • 2000端口号的坑

    这两天对接某游戏的充值接口的时候碰到一个恶心的问题 公司机器和服务器请求游戏方2000端口号的时候 死活获取不到返回No Response 但是同一个请求串外网环境都是正常的 经多次和游戏方你来我往之后发现 2000端口默认是sccp协议
  • 2W字长文吐血整理 Docker&云原生

    Docker 和 云原生 一 概念介绍 1 1 Docker Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中 然后发布到任何流行的 Linux或Windows操作系统的机器上 也可以实现虚拟
  • React 应用的 Nginx 缓存控制

    典型 React 应用面临的缓存问题 可通过 Nginx 配置进行解决 通用部署 构建应用后 只需使用 Nginx 指向静态文件即可 server listen 80 root PATH TO APP build try files uri
  • 爬虫碎碎念

    20230304 非专业人士 简单记录自己的需求和思考 0 引言 平时看到一些网站的照片什么的 有那种批量下载的需求 当然有些也是视频网站的图片介绍什么的 也即是说 我需要把这些网站的照片批量下载下来 以前的时候 写过简单的爬虫 因为需求比
  • Docker——搭建ELK

    安装Elasticsearch 1 拉取镜像 docker box home box docker pull elasticsearch 7 14 2 2 在宿主机准备配置文件 创建目录 docker box mkdir p server0
  • 资源list:Github上关于大数据的开源项目、论文等合集

    Awesome Big Data A curated list of awesome big data frameworks resources and other awesomeness Inspired byawesome php aw
  • 注释转换(C->C++)

    转换原理图解 基于上图原理 可以写出代码 主函数 define CRT SECURE NO WARNINGS 1 include
  • Jenkins从配置到实战(二) - Jenkins的Master-Slave分布式构建

    前言 Jenkins的Master Slave分布式构建 就是通过将构建过程分配到从属Slave节点上 从而减轻Master节点的压力 而且可以同时构建多个 有点类似负载均衡的概念 简单理解就是 将Jenkins服务器上的构建任务分配到其他
  • 数据采集专家----4通道AD采集子卡推荐

    FMC136是一款4通道250MHz采样率16位AD采集FMC子卡 符合VITA57规范 可以作为一个理想的IO模块耦合至FPGA前端 4通道AD通过高带宽的FMC连接器 HPC 连接至FPGA从而大大降低了系统信号延迟 该板卡支持板上可编
  • Unity_Shader高级篇_16_Unity Shader入门精要_减少计算复杂度

    16 8 减少计算复杂度 16 8 1 Shader的LOD技术 和16 5 2提到的模型的LOD技术类似 Shader的LOD技术可以控制使用的Shader等级 它的原理是 只有Shader的LOD值小于某个设定的值 这个Shader才会
  • vue rsa对密码加密(jsencrypt)

    首先用npm命令下载jsencrypt npm install jsencrypt dep 在vue文件中引入jsencrypt import JSEncrypt from jsencrypt 对password加密 this encryp
  • vcglib 说明(转载)

    先来看看 VCGlib 能做什么 最基本的 它提供 Mesh triangular mesh tetrahedralmesh 三角网格或四面体网格 数据结构的定义 该数据结构支持对 Mesh数据的快速访问 拓扑信息 空间查询等 以及高效执行
  • Linux编译器-gcc 的使用以及 make/Makefile的用法

    文章目录 一 gcc 编译器 1 gcc 命令格式 gcc选项 2 完成过程 2 1预处理 2 2 编译 生成汇编 2 3 汇编 生成机器可识别代码 2 4 链接 生成可执行文件 二 make Makefile 1 简单介绍 2 示例代码
  • Scala高阶函数

    匿名函数 而在大量的spark中大都用的是匿名函数 不为函数命名 然后将其复制个一个变量 如 匿名函数格式 Val 变量名 参数 类型 gt 函数体 高阶函数 函数参数 1 将函数做参数传给另一个函数 如 首先我们定义了一个函数BigDat
  • 学习记录——matlab批量读取与存储

    要求文件名按照一定规律排列 如 代码 clc close all clear 设置目标文件夹的路径 folder C Users 26748 Desktop two saveFolder C Users 26748 Desktop two0

随机推荐