深入了解Python装饰器函数

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

本篇文章给大家带来了关于python的相关知识,其中主要整理了装饰器函数的相关问题,包括了装饰器的形成过程、本质与功能、进阶与优化等等内容,下面一起来看一下,希望对大家有帮助。

假如我写了一个函数 f

def f():
    print('hello')

之后我想知道这段函数执行所要的时间,这好办,我只要将代码改为如下就行

import time
def f():
    start = time.time()   #获取程序执行开始的时间
    print('hello')
    end = time.time()     #获取程序执行结束的时间
    print(end - start)    #得出函数f执行所要时间

f()

但之后我有写了无数个函数f2,f3……fn,我想知道每个函数执行所需要的时间,那么如果都像上面一样改,岂不是很闹心?还是不行,因为这样实在是太麻烦了。那怎么办呢?于是灵机一动,写了一个timer函数。。。

import time
def timer(func):
    start = time.time()
    func()
    print(time.time() - start)

def f():
    print('hello')


def f2():
    print('xorld')

timer(f)
timer(f2)

这样看起来是不是简单多啦?不管我们写了多少个函数都可以调用这个计时函数来计算函数的执行时间

但是如果我只想用原来的方式f1(),f2(),fn()调用了这个函数,函数在原本执行输出的结果不变的前提下还可以增加计算时间的功能,而不是调用timer(f),timer(f2)才能计算时间,这该怎么办呢?

看了下面的装饰器函数你就会知道如何解决这个问题



一、装饰器 —— 形成过程

以下就是解决上面问题的代码的简单版:

import time

def f():
    print('hello')

def timer(func):
    def inner():
        start = time.time()
        func()
        print(time.time() - start)
    return inner

f = timer(f)
f()

还是这句话我只想用原来的方式f1(),f2(),fn()调用了这个函数,函数在原本执行输出的结果不变的前提下还可以增加计算时间的功能,但我还是要在函数 f 执行前写 f = timer(f)在这一串代码,是不是觉得碍眼?python的开发者也觉得碍眼,所以python的开发者就为我们提供了一句语法糖来解决这个问题!



二、装饰器 —— 初识语法糖

用@timmer代替f = timer(f),这就是一句语法糖。

import time
def timer(
Matlab基于PSO-MVMD粒子群算法优化多元变分模态分解 阅读详情

相关推荐

智慧安防:基于Java+YOLOv8的视频AI识别平台设计与实现

张工,我们的园区智慧安防项目又出问题了!用Python写的YOLOv8 demo,拉3路RTSP流就卡,视频延迟超过5秒,入侵检测误报率太高,一到晚上光线差就全是误报,而且和我们的Java安防平台对接太麻烦,还要搭个消息队列,架构复杂得要死!“别慌,用Java+YOLOv8啊!

2601_94871597的博客 170

python修饰器整理

python修饰器整理 #coding=utf-8 import time ‘’’ 装饰器 = 高阶函数+ 内嵌函数 说白了 就是偷换了原函数的内存地址!! 类似java的aop切片 装饰器的要求是什么呢? 1、调用方式不能改变 2、原函数源代码不能改变 3、返回值不能改变 先说一下高阶函数 高阶函数是个什么鬼呢 定义: 当一个函数的参数列表需要传入一个函数地址 或者 函数的返回...

qq_34009381的博客 329

基于JAVA+SpringBoot+Vue+MySQL的微信小程序急救常识学习系统 源码+数据库(高分毕设项目).zip

项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。项目都经过严格调试,确保可以运行!可以放心下载技术组成语言:java开发环境:idea数据库:MySql5.7以上部署环境:maven数据库工具:navicat

python函数装饰器

参考文献: 【1】Python 函数装饰器 | 菜鸟教程

灰太狼的小秘密 4413

Python 进阶:函数装饰器

本小节主要梳理函数装饰的用法,循序渐进,逐层增加条件,加大复杂度和难度。环境说明:Python 3.6、windows11 64位。

明而决之 3085

Python装饰器详解

详细介绍了Python装饰器语法的有关内容与使用技巧,希望对大家有所帮助。

千山暮彩 1万+

python函数装饰器(修饰符)

python函数装饰器(修饰符)

晴天的博客 3458

python 带你了解函数装饰器

装饰器基本概念 装饰器(Decorators)Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿) 一切皆对象 首先我们来理解下 Python 中的函数: def hello(name='python'): return 'hello '+name print(hello()) >>> hello python # 我们可以将一个函数赋值给一个变量(也就是说函数可以作为参数传递给其他函

Huangqingmeng的博客 246

python魔法函数装饰器_python: 从函数了解装饰器

让我们扫一眼上次我们写的简单NotFlask类。class NotFlask():def __init__(self):self.routes = {}def route(self, route_str):def decorator(f):self.routes[route_str] = freturn freturn decoratordef serve(self, path):view_fun...

weixin_39850152的博客 110

Python中的函数式编程 3个问题了解装饰器

前言: 装饰器python的一个重要特性, 通过对以下3个方面来进行介绍, 1. 装饰器是什么 2. 为什么需要装饰器 3. 如何使用装饰器 希望可以通过本文理解装饰器, 从而写出更加简洁,优雅, 更加pythonic的代码. 什么是闭包? 有关装饰器的文章中, 经常看到一句话, 装饰器的本质是个闭包. 那么什么是闭包呢, 维基百科中的定义: 闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表), 环境里是若干对符号和值的对应关系. .

be5yond的博客 414

python函数里面引用外部变量_只需四步,让你了解Python装饰器的诞生过程

Python中的装饰器是通过利用了函数特性的闭包实现的,所以在讲装饰器之前,我们需要先了解函数特性,以及闭包是怎么利用了函数特性的① 函数特性python中的函数特性总的来说有以下四点:1. 函数作为变量传递def 说明:函数如果不加括号,是不会执行的,代表的是一个函数对象,它是可以作为变量来传递2.函数作为参数传递def 说明:一个函数可以接受另一个函数对象作为自己的参数,并对函数对象进行处理3...

weixin_39539002的博客 166

Python 修饰类的装饰器

本文是我在学习时的篇笔记,示例代码可能岑在直接引用学习资料的情况。 在看了解Python装饰器之前可以先了解一下Python函数装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 之前的例子中装饰器接收一个函数,并返回一个函数,从而起到加工函数的效果。 在Python 2.6以后,装饰器被拓展到类。一个装饰器可以接收一个类,...

Frank_Abagnale的博客 2570

python入门超easy系列(五)——— 了解一下python的闭包、装饰器和递归函数

这位路过的靓仔,python的闭包和装饰器了解一下,面试会问 众所周知,python是世界上入门最简单的语言

ZKK199704的博客 349

python装饰器返回参数_python 装饰器

简介:装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。常用于有切面需求的成精,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,有了装饰器,就可以抽离大量与函数功能本身无关的雷同代码并继续使用。概括的说,装饰器的作用就是为已存在的对象添加额外的功能。一、在学习装饰器之前需要先了解已下知识点:1、函数的作用域1...

weixin_34284072的博客 816

python装饰器的作用_Python中的装饰器函数与高阶函数有什么区别

Python中的装饰器函数与高阶函数有什么区别发布时间:2020-11-11 14:52:15来源:亿速云阅读:93这期内容当中小编将会给大家带来有关Python中的装饰器函数与高阶函数有什么区别,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。高阶函数1、可以使用函数对象作为参数的函数2、或可以将函数作为返回值的函数3、函数对象:定义好的函数,使用函数名调用(不要...

weixin_39840729的博客 88

Python学习之——装饰器

Python学习之——装饰器

selfsongs 2万+

Python函数:装饰器

本章介绍了python函数中的装饰器

2403_86719076的博客 2314

超详细Python装饰器函数讲解 | 从此不再遗忘

装饰器函数(wrapper)Python的一个非常强大的特性,笔者在初次学习时认为这种特性过于无关紧要,甚至对于这种脱裤子放屁的行为感到匪夷所思(还是太年轻了hh),而后续在学习flask以及其他高阶Python技能的过程中发现经常使用到,从而每次遇见装饰器不是苦不堪言就是即将苦不堪言。因此,决定写下这篇文章,以一种通俗的方式帮助理解,从此彻底克服装饰器恐惧症~初次看到装饰器这个词时,你可能会有疑问:什么是装饰器?为什么要用装饰器

oxk39894的博客 1374

python 10个好用的装饰器(非常详细)零基础入门到精通,收藏这一篇就够了

Python装饰器是一种特殊类型的函数,它可以修改或增强其他函数的功能,而无需更改原始函数的源代码。装饰器本质上是一个接收函数作为参数的函数,它返回一个新的函数或者修改过的原函数,通常用于插入日志、性能测试、权限校验、缓存、事务处理等场景。利用functools.lru_cache实现结果缓存,避免重复计算。使用cProfile进行性能分析。用于测量函数执行时间。确保函数参数类型正确。在异常发生时自动重试。确保输入满足特定条件。记录函数调用的日志。

A1_3_9_7的博客 951

Python装饰器函数

以上是装饰器函数的一些基本内容, 要尝试着敲一遍才能理解, 如果第一遍看不懂的话,不要慌, 因为装饰器,闭包函数,*操作符等算是python中的中高级内容了, 我也是学习了好多遍,虽然实际中从没用过,但是学学对于理解pyhton的特性还是很有帮助的, 最后, 希望这篇文章可以帮到你!

享你所想 1595

Python装饰器使用方法详解

当涉及到处理有返回值的函数时,对于内部函数我们应该使用一个变量将函数的运行结果保存起来,并放在内层函数的return中。装饰器可以改变被装饰函数的行为,或者在调用被装饰函数之前和之后增加额外的操作。装饰器的语法是使用 @ 语法符,在函数定义之前增加装饰器函数的名称。函数中,我们增加了形参的输入,因此,在装饰器中,也要为之做出更改。权限控制:装饰器可以用来实现函数级别的权限控制,只允许特定的用户访问特定的函数装饰器可以让你在函数或类的定义中添加额外的逻辑,而不更改它们的实现。在代码中,我们建立了一个名为。

Hello Word 4241
下一篇: 【无标题】【面试高频题】难度 1.5/5,数据结构运用题
Java716ii
博客等级 码龄4年 1粉丝 · 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值