返回顶部
首页 > 资讯 > 后端开发 > Python >Python 语法之装饰器
  • 486
分享到

Python 语法之装饰器

2023-06-02 01:06:59 486人浏览 泡泡鱼

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

摘要

  装饰器的概念  装饰器是 python 的一个重要部分。简单地说:就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。  这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌 “原”

  装饰器的概念

  装饰器是 python 的一个重要部分。简单地说:就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。

  这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌 “原” 函数的函数。

  将函数作为参数传给另一个函数

  def yanzheng():

  return "--- 正在验证 ---"

  def login(func):

  print(func())

  print("--- 正在登陆 ---")

  login(yanzheng)

  运行结果:

  --- 正在验证 ---

  --- 正在登陆 ---

  写代码要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

  封闭:已实现的功能代码块

  开放:对扩展开发

  现在你已经具备所有必需知识,接下来进一步学习什么是真正的装饰器。

  你的第一个装饰器

  def func_out(func):

  def func_in():

  print("--- 正在验证 ---")

  func()

  return func_in

  @func_out

  def login():

  print("--- 正在登陆 ---")

  login()

  运行结果:

  --- 正在验证 ---

  --- 正在登陆 ---

  @函数名称 是 Python 的一种语法糖。简而言之,语法糖就是程序语言中提供[奇技淫巧]的一种手段和方式而已。 通过这类方式编写出来的代码,即好看又好用,好似糖一般的语法。固美其名曰:语法糖

  装饰器下面正好是个函数,则默认执行:login = func_out(login)

  装饰器的流程图

  

  装饰有返回值的函数

  上面的案例,被装饰的 login() 函数并没有返回值,那么接下来咱们看看有返回值的函数如何装饰。

  首先,先看第一个案例:

  def func_out(func):

  def func_in():

  print("--- 正在验证 ---")

  func()

  return func_in

  @func_out

  def login():

  return "--- 正在登陆 ---"

  result = login()

  print(result)

  运行结果:

  --- 正在验证 ---

  None

  思考一下,为什么我调用 login() 函数,并且使用 result 变量来接收返回值,为什么结果是 None 呢?

  如果想不明白,就看看第二个案例:

  def func_out(func):

  def func_in():

  print("--- 正在验证 ---")

  data = func()

  return data

  return func_in

  @func_out

  def login():

  return "--- 正在登陆 ---"

  result = login()

  print(result)

  运行结果:

  --- 正在验证 ---

  --- 正在登陆 ---

  大家仔细观察代码,这两个案例有哪些不同?

  发现了吗?我在 func_in() 函数的里面多写了两句代码:

  1、当我们调用被装饰的 login() 函数时,实际执行的是 func_in() 函数的代码,此时会调用 print() 函数打印 "--- 正在验证 ---"。郑州人流医院 Http://rl.zyfuke.com/

  2、代码执行到 data = func() 时,会先执行右侧的 func() 函数,而这个函数是原始的 login() 函数,所以会 return 返回一个值,此时这个值被等号左侧的 data 变量接收。

  3、代码执行到 return data,此时会将 data 值返回更上一层,而这个值被 result 变量接收。

  4、最终打印 result 变量就输出了原始 login() 函数的值。

  在这里最需要注意的就是 return 返回数据,只能返回一层函数,多层时,就需要在上层同时使用 return。

  装饰有参数的函数

  demo1:

  def func_out(func):

  def func_in():

  func()

  return func_in

  def login(a):

  prin

  print(a)

  login(10)

  运行结果:

  10

  demo2:

  def func_out(func):

  def func_in():

  func()

  return func_in

  @func_out

  def login(a):

  print(a)

  login(10)

  运行结果:

  TypeError: func_in() takes 0 positional arguments but 1 was given

  类型错误:func_in()接受0个位置参数,但给出了1个

  demo3:

  def func_out(func):

  def func_in(data):

  func(data)

  return func_in

  @func_out

  def login(a):

  print(a)

  login(10)

  运行结果:

  10

  demo4:

  def func_out(func):

  def func_in(*args,**kwargs):

  func(*args,**kwargs)

  return func_in

  @func_out

  def login(*args,**kwargs):

  print(args)

  print(kwargs)

  login(10,20,c=1,b=2)

  运行结果:

  (10, 20)

  {'c': 1, 'b': 2}

  总结

  装饰器函数只有一个参数就是被装饰的函数的引用

  装饰器能够将一个函数的功能在不修改代码的情况下进行扩展

  在函数定义的上方@装饰器函数名 即可直接使用装饰器对下面的函数进行装饰

--结束END--

本文标题: Python 语法之装饰器

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

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

猜你喜欢
  • Python 语法之装饰器
      装饰器的概念  装饰器是 Python 的一个重要部分。简单地说:就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。  这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌 “原”...
    99+
    2023-06-02
  • Python语法详解之decorator装饰器
    python 是一门优雅的语言,有些使用方法就像魔法一样。装饰器(decorator)就是一种化腐朽性为神奇的技巧。最近一直都在使用 Tornado 框架,一直还是念念不忘 Flas...
    99+
    2024-04-02
  • Python之装饰器
    在Python中一切皆对象,函数是一等对象。这意味着可以通过名字引用函数。>>> a=123 >>> a 123 >>> name='zeng' >>> name 'z...
    99+
    2023-01-31
    Python
  • python魔术方法之装饰器
    三个魔术方法:__get__()__set__()__delete__()object.__get__(self,实例名,owner)    #owner = 属主 ,instance = 属主类owner的实例object.__set__...
    99+
    2023-01-31
    魔术 方法 python
  • day20-python之装饰器
    1.装饰器 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import time 4 def cal(l): 5 start_time=time.time() ...
    99+
    2023-01-31
    python
  • python高级语法之闭包和装饰器详解
    目录一、闭包二、一个简单的例子三、装饰器3.1 简单装饰器3.1.1 使用装饰器的语法糖3.1.2 装饰器的执行时机3.2 通用装饰器3.2.1 装饰带有参数的函数3.2.2. 装饰...
    99+
    2024-04-02
  • python之装饰器(函数)
    1. 装饰器   遵循的原则:     开闭原则:   对功能的扩展开放  对代码的修改是封闭 # 通用装饰器写法 # 存在的意义: 在不破坏原有函数和原有函数调用的基础上,给函数添加新的功能. def wrapper...
    99+
    2023-01-30
    函数 python
  • python进阶之装饰器
    一.无参装饰器 问题:如何计算一段程序的运行时间? 先看一段简单代码: 1 import time 2 def func(): 3 start = time.time() # 记录程序开始时间 4 time.sleep(...
    99+
    2023-01-30
    进阶 python
  • python之yield与装饰器
    防伪码:忘情公子著python中的yield:  在之前发布的《python之列表解析与生成器》中我们有提到过,生成器所实现的是跟列表解析近似的效果,但是我们不能对生成器做一些属于列表解析的操作。  因为生成器本身就不是一个列表,它只是模拟...
    99+
    2023-01-31
    python yield
  • Python学习之装饰器与类的装饰器详解
    目录装饰器装饰器的定义装饰器的用法类中的装饰器类的装饰器 - classmethod类的装饰器 - staticmethod类的装饰器 - property通过学习装饰器可以让我们更...
    99+
    2024-04-02
  • 详解Python装饰器之@property
    一、property() 函数讲解 了解 @property 装饰器之前,我们首先要了解内置函数的 property()。 class property(fget=None, fset=None, fdel=No...
    99+
    2022-06-02
    Python @property python装饰器
  • Python 3 之 装饰器详解
    ------------ 装饰器 -----------------------------------------------------什么是装饰器装饰器是为函数和类指定管理代码的一种方式。装饰器本身的形式是处理其他的可调用对象的可调用...
    99+
    2023-01-31
    详解 Python
  • python学习系列之python装饰器
    一、常规的装饰器,比如 @auth,执行2步操作:1、执行auth函数,并传参func进来2、获取返回值,并赋值给被装饰器的函数的函数名(如让fetch_server_list等于返回值)二、而带参数的装饰器,比如 @auth(before...
    99+
    2023-01-31
    系列之 python
  • python装饰器2:类装饰器
    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 本文是装饰器相关内容的第二篇,关于类装饰器。 "类装饰器"有两种解读方式:用来装饰类的装饰器;类作为装饰器装饰其它东西。你如何认为取决于你,两种说法都有出现在其它的文章中。我的...
    99+
    2023-01-30
    python
  • python基础之装饰器详解
    目录一、前言二、高阶函数三、函数嵌套四、装饰器4.1 被装饰方法带返回值4.2 被装饰方法带参数4.3 验证功能装饰器4.4 验证功能装饰器——带参数一、前言 装...
    99+
    2024-04-02
  • Python全栈开发之---装饰器
    1、装饰器的形成过程 1 import time 2 3 def func1(): 4 print('in func1') 5 6 def timer(func): 7 def inner(): 8...
    99+
    2023-01-30
    Python
  • python三大器之装饰器详解
    目录装饰器总结装饰器 讲装饰器之前要先了解两个概念: 对象引用 :对象名仅仅只是个绑定内存地址的变量 def func(): # 函数名仅仅只是个绑定内存地址的...
    99+
    2024-04-02
  • python 装饰器
    装饰器本质上是一个Python函数,它可以让其他函数在不雲要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面雲求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳...
    99+
    2023-01-30
    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
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作