iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python——装饰器(无参)
  • 445
分享到

Python——装饰器(无参)

Python 2023-01-31 03:01:37 445人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

装饰器装饰器可以叠加使用,执行是从下到上执行的无参装饰器 @logger1.它是一个语法糖2.函数作为它 的形参3.返回值也是一个函数4.可以使用 @function 方式,简化调用注意: 此处的装饰器的定义并不准确,只是方便理解装饰器和高

装饰器

装饰器可以叠加使用,执行是从下到上执行的

无参装饰器 @logger

1.它是一个语法糖

2.函数作为它 的形参

3.返回值也是一个函数

4.可以使用 @function 方式,简化调用

注意: 此处的装饰器的定义并不准确,只是方便理解

装饰器和高阶函数

装饰器是高阶函数,但装饰器是对传入函数功能的装饰

装饰器函数的演化过程:

"""

装饰器

一个普通的加法函数,想增强他的功能

"""

def add(x,y):

   return x + y

"""增加信息输出功能"""

def add(x,y):

   print("call add,x+y")# 日志输出到控制台

   return x + y

"""上面的函数是完成了需求,但是有缺点

1.print语句的耦合度太高

2.加法函数属于业务功能,而输出信息的功能,属于非业务功能代码,不该放在业务函数加法中"""

"""把添加功能移出来"""

def logger(fn):

   print("call add,x+y")

   ret = fn(3,4)

   return ret

print(logger(add))

def logger(fn,x,y):

   print("call add,x+y")

   ret = fn(x,y)

   return ret

print(logger(add,3,4))

def logger(fn,*args,**arges):

   print("call add,x+y")

   ret = fn(*args,**arges)

   return ret

print(logger(add,3,4))

def logger(fn):

   def wrapper(*args,**arges): # 可变位置传参,可变关键字传参

       print("call add,x+y")

       ret = fn(*args,**arges) # 参数解构

       return ret

   return wrapper

print(logger(add)(4,5))

add = logger(add) # add = wrapper

ret = add(4,5) # wrapper(4,5)

装饰器 核心思想

import datetime

def logger(fn):

   def wrapper(*args,**arges): # 可变位置传参,可变关键字传参

       print("前面增强")

       start = datetime.datetime.now()

       ret = fn(*args,**arges) # 参数解构

       delta = (datetime.datetime.now() - start).total_seconds()

       print("so fast") if delta < 5 else print("so slow")

       print("后面增强")

       return ret

   return wrapper

@logger # add = logger(add) => add 就是 wrapper

def add(x,y): # wrapper(4,5)

   return x + y

ret = add(4,5) # wrapper(4,5) => logger(add)(4,5)

print(ret)

理解装饰器:

1.装饰器函数

2.前置功能增强

3.被增强函数

4.后置功能增强


def logger(fn):                     # 调用 被装饰的函数

   def wrapper(*args,**kwargs):    # 传入被装饰函数参数

       print("before function")    # 前置功能增强

       ret = fn(*args,**kwargs)    # 使用被装饰函数的功能

       print("after function")     # 后置功能增强

       return ret                  # 返回被装饰函数的 计算结果

   return wrapper                  # 返回 被装饰的函数

@logger                             # 无参装饰器

# @logger <==> add = logger(add) = wrapper # add(x,y) == wrapper(x,y)

def add(x,y):                       # 被装饰的函数

   return x + y

add(3,4)

print(add(3,4))

#看似调用add函数,使用了装饰器@logger之后,实际上 调用的是 wraaper(*args,**kwargs)函数


--结束END--

本文标题: Python——装饰器(无参)

本文链接: https://www.lsjlt.com/news/187289.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python——装饰器(无参)
    装饰器装饰器可以叠加使用,执行是从下到上执行的无参装饰器 @logger1.它是一个语法糖2.函数作为它 的形参3.返回值也是一个函数4.可以使用 @function 方式,简化调用注意: 此处的装饰器的定义并不准确,只是方便理解装饰器和高...
    99+
    2023-01-31
    Python
  • Python带参装饰器
    装饰器(无参)  它是一个函数;  函数作为它的形参;  返回值也是一个函数;  可以使用@functionname方式,简化调用;装饰器和高阶函数  装饰器是高阶函数,但装饰器是对传入函数的功能的装饰(功能增强)import dateti...
    99+
    2023-01-31
    Python
  • python 装饰器(二): 加参数
    接上篇python 闭包&装饰器(一) 一、功能函数加参数:实现一个可以接收任意数据的加法器 源代码如下: def show_time(f): def inner(*x, **y): # 形参 ...
    99+
    2023-01-30
    参数 python
  • Python无参装饰器的实现方案及优化
    目录一、什么是装饰器二、何时用装饰器三、如何写一个装饰器方案一:方案二:方案三:优化一(参数优化,实现任意参数): 优化二(实现装饰其他对象):优化三(得到相同返回值):&...
    99+
    2024-04-02
  • 怎么在python中修饰带参数的装饰器
    本篇文章给大家分享的是有关怎么在python中修饰带参数的装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的五大特点是什么python的五大特点:1.简单易学,...
    99+
    2023-06-14
  • python装饰器2:类装饰器
    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 本文是装饰器相关内容的第二篇,关于类装饰器。 "类装饰器"有两种解读方式:用来装饰类的装饰器;类作为装饰器装饰其它东西。你如何认为取决于你,两种说法都有出现在其它的文章中。我的...
    99+
    2023-01-30
    python
  • python怎么操作带参的装饰器
    这篇文章主要介绍了python怎么操作带参的装饰器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python怎么操作带参的装饰器文章都会有所收获,下面我们一起来看看吧。说明装饰函数的第一个参数是装饰func,和...
    99+
    2023-06-30
  • 带参数的全类型 Python 装饰器
    这篇短文中显示的代码取自我的小型开源项目按合同设计,它提供了一个类型化的装饰器。装饰器是一个非常有用的概念,你肯定会在网上找到很多关于它们的介绍。简单说,它们允许在每次调用装饰函数时(之前和之后)执行代码。通过这种方式,你可以修改函数参数或...
    99+
    2023-05-14
    Python 装饰器
  • python装饰器
    什么是装饰器:   装饰器就是python中的一个语法糖。作用就是在不改动之前代码的情况下给某个函数增加相应想要增加的功能。 假设需求:   我在几个函数内分别放了一部电影,代码如下: 1 def mv1(): 2 print(...
    99+
    2023-01-30
    python
  • python-装饰器
    装饰器简介:给被装饰的函数在不更改代码的基础上增加新的功能;多个装饰器的执行顺序:从最靠近原始函数的装饰器开始执行,最后执行原始函数; 直接上个简单的例子就懂了: 一 最简单的装饰器:#!/usr/bin/python def deco(f...
    99+
    2023-01-31
    python
  • python 装饰器
    装饰器本质上是一个Python函数,它可以让其他函数在不雲要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面雲求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳...
    99+
    2023-01-30
    python
  • python函数装饰器构造和参数传递
    目录一.闭包函数二.python装饰器构造三.python装饰器叠加四.python装饰器传参1.装饰器单个参数传递2.装饰器多个参数传递3.装饰器的不定长参数五、带返回值的装饰器前...
    99+
    2024-04-02
  • 怎么在python中操作带参的装饰器
    本篇文章给大家分享的是有关怎么在python中操作带参的装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的工...
    99+
    2023-06-14
  • python装饰器1:函数装饰器详解
    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础...
    99+
    2023-01-30
    详解 函数 python
  • Python之装饰器
    在Python中一切皆对象,函数是一等对象。这意味着可以通过名字引用函数。>>> a=123 >>> a 123 >>> name='zeng' >>> name 'z...
    99+
    2023-01-31
    Python
  • Python装饰器-闭包与函数装饰器
    一、闭包在学习装饰器前,需要先了解闭包的概念。形成闭包的要点:函数嵌套将内部函数作为外部函数的返回值内部函数必须要使用到外部函数的变量下面以一个计算列表平均值的案例来讲解闭包:def make_average(): # 创建一个列表,用来保...
    99+
    2023-05-14
    Python 函数 装饰器
  • Python装饰器详情
    目录1、装饰器1.1 应用场景2、万能装饰器3、多层装饰器4、带参数的装饰器1、装饰器 装饰器(Decorator):从字面上理解,就是装饰对象的器件。可以在不修改原有代码的情况下,...
    99+
    2024-04-02
  • Python装饰器与类的装饰器怎么实现
    这篇“Python装饰器与类的装饰器怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python装饰器与类的装饰器怎么...
    99+
    2023-06-29
  • python装饰器进阶
    目录 装饰器进阶 1. 被装饰的函数有多个参数。 2. 被装饰的函数有返回值 3.在函数中嵌入装饰器 4. 装饰器类 ...
    99+
    2023-01-30
    进阶 python
  • Python装饰器(Decorate)使
    一、装饰器是什么?Python装饰器其实就是一个返回值为函数的高阶函数,其中至少嵌套一个函数(作为返回值返回)。二、装饰器工作原理。遵循编程的闭合原则,在不修改原函数代码的基础上增加功能,使用装饰器是一种很好的选择。装饰器工作基于以下两步完...
    99+
    2023-01-31
    Python Decorate
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作