python装饰器学习笔记

Python学习笔记-@property装饰器 python装饰器 阅读详情

python装饰器学习笔记一

合理地使用装饰器,能够减少代码冗余,使代码的可读性更高,结构更加清晰,还能实现一些神奇的功能。

例1:实现函数运行前后打印信息

"""装饰器————日志打印"""
# 定义装饰器
def logger(func):
    def wrapper(*args, **kwargs):
        print("start: {}".format(func.__name__))

        func(*args, **kwargs)

        print("end")
    return wrapper

@logger
def add(n,m):
    print(n+m)
    return n+m

add(3,4)

运行结果:

start: add
7
end

例2:实现函数运行时间计时:

"""装饰器————时间计时器"""
import time
def timer(func):
    def wrapper(*args, **kwargs):
        time_start = time.time()
        print("开始时间:{}".format(time_start))

        func(*args, **kwargs)

        time_end = time.time()
        print("结束时间:{}".format(time_end))

        cost_time = time_end - time_start
        print("cost time: {}".format(cost_time))
    return wrapper

@timer
def sleep_func(time_):
    print("开始睡着")
    time.sleep(time_)
    print("睡醒了")

sleep_func(3)

运行结果:

开始时间:1589000558.8140652
开始睡着
睡醒了
结束时间:1589000561.8142624
cost time: 3.000197172164917

例3:装饰器传递参数,适用于实现大致功能一致,部分不同的装饰器

"""传参数的装饰器————嵌套"""
def say_hello(contry):
    def wrapper(func):
        def deco(*args, **kwargs):
            if contry == "china":
                print("你好!")
            elif contry == "america":
                print("hello!")
            else:
                return

            func(*args, **kwargs)
        return deco
    return wrapper

@say_hello("china")
def chinese():
    print("我来自中国。")

@say_hello("america")
def american():
    print("I am from America")

chinese()
american()

运行结果:

你好!
我来自中国。
hello!
I am from America

例4:不带参数的 类 装饰器

class logger2(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print("[INFO]: the function {func} is running"
              .format(func=self.func.__name__))
        return self.func(*args, **kwargs)

@logger2
def say(something):
    print("say {}!".format(something))

say("hello")

运行结果:

[INFO]: the function say is running
say hello!

例5:带参数的 类 装饰器

"""带参数的!类装饰器!"""

class logger3(object):
    def __init__(self, msg, level="INFO"):
        self.msg = msg
        self.level = level

    def __call__(self, func):
        def wrapper(*args,**kwargs):
            print("[{level}]: The function \"{name}\" {msg}"
                  .format(level=self.level, msg=self.msg, name=func.__name__))
            func(*args, **kwargs)
        return wrapper

@logger3(msg="is running", level="INFO")
def say(something):
    print("say {}!".format(something))

say("hello~")

运行结果:

[INFO]: The function "say" is running
say hello~!

例6:自带的property装饰器,实现自定义类属性的封装调用

"""自带的property装饰器"""
class Student(object):
    def __init__(self, name):
        self.name = name
        self._age = None

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if not isinstance(value, int):
            raise ValueError("输入不合法:年龄必须为整数!")
        if not 0<value<100:
            raise ValueError("输入不合法:年龄范围在0-100之间")
        self._age=value
        print("赋值完成")

    @age.deleter
    def age(self):
        del self._age
        print("删除成功")

xh = Student("小红")
xh.age = 18
print(xh.age)
del xh.age

运行结果:

赋值完成
18
删除成功
【密码专栏】超强进阶:PLONK VS Groth16(上) 前言 前文《天冷了,干了这碗“零知识证明”鸡汤》对「零知识证明学习」作了一个形象化的比喻:炖鸡汤。那么本系列的主要内容可以简单概括为《论高压锅炖鸡汤的一百种方法》之方法二。在学会了“清炖鸡汤”之后,不如来一口“阿胶鸡汤”补补脑细胞吧! 正如鸡汤不同风味之间各具千秋,不同的zk-SNARK方案也各有所长。zk-SNARK方案可以被分为【通用】与【非通用】zk-SNARK,PLONK与Groth16分别是其中的典型代表。通过本系列,我们将对PLONK算法内容作简要介绍,并指出PLONK和Groth16算法思路上 阅读详情

相关推荐

Mplus实战:如何用交叉滞后面板模型(CLPM)分析心理学纵向数据?

本文提供了在Mplus软件中应用交叉滞后面板模型(CLPM)分析心理学纵向数据的实战指南。文章详细拆解了CLPM的核心概念、Mplus语法框架,并涵盖从基础的两变量模型到多变量、潜变量建模的扩展,以及结果解读与常见陷阱规避,旨在帮助研究者利用这一经典工具有效探索变量间的动态预测关系。

weixin_29253711的博客 403

Python个人学习笔记(12):函数(装饰器)

hello123我是函数 2新版的pycharm会报错:func1()~~~~~^^

NEET_LH的博客 384

Python地理空间数据库之geopandas使用详解

地理空间数据分析在许多领域中都有着广泛的应用,包括地理信息系统(GIS)、城市规划、环境科学、地质勘探等。Python GeoPandas是一个强大的库,旨在简化地理空间数据的处理和分析。本文将深入介绍GeoPandas库,包括其基本概念、功能特性、示例代码以及在实际应用中的应用场景。

Rocky006的博客 1万+

Python 装饰器的学习笔记

Python 装饰器的学习笔记

engchina的专栏 702

王道考研计算机网络课件全解析:从零搭建你的知识框架(附B站视频+PPT下载)

本文全面解析王道考研计算机网络课程的核心知识体系,从OSI七层模型到TCP/IP四层架构,详细讲解物理层、数据链路层、网络层、传输层和应用层的关键技术。提供高效学习路径、实战案例和常见误区警示,帮助考生系统构建计算机网络知识框架,适合计算机考研备考者参考学习。

leaf8的博客 560

RK3568平台(网络篇)添加网络交换芯片RTL8306M

该交换芯片支持I2C、SPI、mdio通信,但是看ast1520的uboot代码采用的是mdio去通信phy芯片的,所以暂时也先采用mdio的方式,需要配置相应的引脚才可以配置成mdio通信模式,具体的配置硬件工程师解决。RTL8306M芯片上可能没有提供MDC/MDIO接口,可以通过GPIO(General Purpose Input/Output)来模拟,GPIO可实现串行输入输出,且一般CPU上会提供很多GPIO接口供用户自定义使用。

weixin_49303682的博客 3933

python装饰器的全面总结学习笔记

之前了解过Python中的装饰器、生成器和迭代器的概念,并没有系统的深入了解,平时写代码基本也没有碰到过这样的场景需求。最近在看tensorflow2.0框架相关的框架的时候,看到了装饰器,作用不是很熟悉,觉得有必要做一个系统的学习,然后记录下来,加深理解同时以备后续复习。 ...

HUSTHY的博客 570

华为OD机试 - 单词倒序(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1226

Python学习笔记——装饰器

今天学习了装饰器,把自己的理解,写在下面,方便大家参考,也方便我以后随时查阅。注意:以下完全是自己学习后的理解,可能因为知识的局限性稍有错误。以后随着知识的扩充,会回来进行修正。1. 装饰器介绍装饰器,顾名思义,是用来装饰的,装饰对象是函数。个人理解用装饰器装饰某函数,就是对这个函数进行封装,封装后生成的新函数的函数名与原函数名相同(利用函数名只能调用到新函数,调用不到原函数)。2. 装饰器原理(想

OneKey 385

YOLOv11 模型剪枝实战:深入解析通道剪枝与层剪枝的策略与实现(含环境配置、微调技巧与部署测试)

YOLOv11模型剪枝技术通过移除冗余参数和结构来压缩模型,主要包括通道剪枝和层剪枝两种方法。通道剪枝通过评估批量归一化层的缩放因子γ确定通道重要性,移除不重要的特征通道;层剪枝则直接删除整个网络层或模块。剪枝流程包括评估重要性、移除冗余成分、微调模型和评估性能四个步骤。该技术可显著降低模型计算量和参数量,适合在资源受限设备上部署高性能目标检测模型。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1960

Mybatis面试题(基础篇)

(1)mybatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。(2)mybatis避免了几乎所有的JDBC代码(说明了mybatis底层用的就是JDBC,只不过是封装了)和手动设置参数以及获取结果集。(3)mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。

qq_38196449的博客 1686

python装饰器name_Python装饰器学习笔记

Python装饰器是Python语法的精髓,学会使用后能让代码更加简洁,代码更能复用,我们在写代码时有些功能会经常使用,比如读写文件,做短信验证校验等等,这些代码的功能实现大同小异,我们就可以使用装饰器来做到复用这类功能。装饰器是什么?要理解Python的装饰器,首先我们先理解一下Python的函数对象。我们知道,在Python里一切都是对象,函数也不例外,函数是第一类对象(first-class...

weixin_39792686的博客 184

Zephyr内核——内存管理——内存堆

Zephyr提供了一组允许线程动态分配内存。

wayne2018的博客-心情驿站 771

python 学习笔记【装饰器 】

装饰器 (Decorator) 在 Python 编程中极为常见,可轻松实现 Metadata、Proxy、 AOP 等模式。简单点说,装饰器通过返回包装对象实现间接调用,以此来插入额外逻辑。语法看上去和 Java Annotation、C# Attribute 类似,但不仅仅是添加元数据。 &gt;&gt;&gt; @check_args ... def test(*args): ... p...

智数与链 200

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Python学习笔记之装饰器

现在我们有一个函数: # 一个函数 def now(): print('2019-07-11') 假设我们想增加他的功能,在每次调用该函数时,都打印一下日志,但是不能更改这个函数 now() 的定义,那么就可以采用装饰器。在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。下面代码展示了如何定义一个装饰器: # 使用装饰器增加 now() 函数的功能。 def lo...

space_walk的博客 309

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python装饰器学习笔记

Python装饰器 文章目录Python装饰器基本概念从零开始的逐步分析修饰后的问题向被包装后的函数传递参数使用场景:stdout日志接受参数的装饰器作为一个类的装饰器总结 学习资料: Python 函数装饰器 装饰器类 Python __call__()方法(详解版) 基本概念 先建立一个观点: 函数本质上是一个对象,可以赋值给其他变量 加上()后就变成执行函数本身,并获得其返回值 修改其他函数功能的函数,即是装饰器 因为它要修改其他函数,所以装饰器本身应该返回一个函数 从而将这个修改后的函数赋值给原

qq_43266093的博客 590

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python 装饰器原理_Python学习笔记之装饰器原理

1 defdecorator(fn):2 defwrapper():3 print("询价")4 fn()5 print("购买成功!")67 returnwrapper8910 defapple():11 print("购买苹果")121314 deforange():15 print("购买橘子")161718 defpotato...

weixin_39969006的博客 97

Python装饰器 学习笔记

写在前面: 1、Python里面一切皆对象,记住这点,很多东西会好理解许多。 2、因为我记不住英语单词,而且特别讨厌起名字,本文中变量名大部分都是中文命名,可能会引起些许不适。 3、文章是jupyter notebook里写好,运行过,然后导入过来的。 装饰器 我们先看一个普通函数 def 一个普通函数(): """ 大家好, 我是普通函数的文档。 """ ...

peacekeeper的专栏 207

Python 带参的装饰器

本文是我在学习时的篇笔记,示例代码可能岑在直接引用学习资料的情况。 在看了解Python带参装饰器之前可以先了解一下:Python装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' @decorator的用法,装饰器默认它后面的函数是唯一的参数。装饰器的语法允许 我们调用decorator时,提供其它参数,比如@decora...

Frank_Abagnale的博客 577

Python之装饰器学习笔记

装饰器本质上是一个python函数,其返回值也是一个函数对象 作用:不修改原函数情况下,为已有函数添加新的功能。如插入日志、性能测试、事务处理、缓存、权限校验等场景。 闭包函数 在函数内部定义一个内嵌函数,内嵌函数引用了外部函数的变量,此时内嵌函数称为闭包函数。闭包函数所引用的外部定义的变量被叫做自由变量。闭包可以将其自己的代码和作用域以及外部函数的作用结合在一起。 # coding=...

zhouyuming_hbxt的博客 198
上一篇: FTP编程实验——实现文件上传下载(基于Python3.7和PyQt5)
下一篇: python运算符学习笔记
LiePy
博客等级 码龄7年 1927粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值