python中wraps是什么意思_「wraps」Python中functiools.wraps()的功能以及用法详解 - seo实验室...

wraps

今天学习Pyhton学到了装饰器,但是遇到视频无法播放,附带源码中有一个functools.wraps()的装饰器,看了好久做了实验才知道是干什么的。

先看一下functool.wraps的定义以及阐述(由于我用的是虚拟机,所以只能上图片不能上代码了):

01dbcea30f414e23a03cbfed0ad774ac.png

大概意思是说,这个函数返回一个装饰器,调用update_wrAPPer()函数,和装饰器一起作为wraps()的剩余的参数,默认参数是和update_wrapper()的相同,后面大概意思是这个是个简单的函数去应用partial()和update_wrapper().(英语不好,只能翻译出大概。见谅见谅。)

在functools的源文件代码中,有这样的说明:

4544a2e17ef4c006e006b6c5116f9068.png

大概意思是说:update_wrapper()和wraps()是帮助编写可以处理naive内省的包装器功能的工具。原谅我的英语不好,这里的naive翻译不出来,我只知道它的天真的意思。

而wraps的参数是这样定义的:

b14532d4d81fa7373791246a0841a260.png

表明,这个函数(functool.wraps)只会对这几个属性起作用,而这些属性都是我们非常熟悉的,比如__doc__属性,我们可以用来查看帮助文档,从wraps的文档中,我猜测这个函数应该有partial()类似的功能。

我们知道,Python中partial()函数可以给某带参数的函数的参数绑定一个默认值,调用的时候就无须传递参数了,那么,这个函数(functool.wraps())是不是可以起到类似于绑定的作用,但是绑定的是源文件的私有属性。

当装饰器装饰一个函数时,实际上就是将被装饰的函数作为一个参数传入装饰器函数,返回一个闭包,而闭包内部调用这个函数,再另外多做一些事情。然后再由我们的函数名字去接收那个返回值的闭包的引用,达到了我们装饰的目的,所以此时,我们的函数的__name__等属性其实已经改变,变成了我们闭包的私有属性。

怀着试试看的态度,我写了以下代码,得出了如下的结果:

eceddb659aa9df7d416ab624abc7337b.png

可见,这个函数确实是将被装饰函数的__name__以及__doc__等属性绑定到了原函数的上面。我把那个闭包的装饰器@functools.wraps(func)

删除掉,出现这样的结果:

11c84229f12839c084bbe47e92fccbec.png

所以,我得出这样的总结:

functools.wraps()这个函数,作为一个装饰器去装饰闭包,并且给这个装饰器传入一个参数,这个参数是闭包外的装饰器装饰的那个外部的被装饰函数,此时,外部我们的自定义的函数的私有属性如__name__、__doc__等还是为我们自定义的函数本身的私有属性,而不会变成闭包的私有属性。

谢谢大家看完,小白理解浅陋,还望各位指出问题所在。

相关阅读

上一篇文章链接Django07我们接着上一篇文章的基础上,来继续了解进一步的Django框架一.事务管理在实际项目里,事务管理是一个很重要

最近迷上一拳超人,在xx动漫上看漫画时总是遇到各种网络问题,索性之间爬下来源码如下import requests, re

from bs4 import Beautifu

目录

题目描述

输入/输出描述

解决思路

代码

代码走读

传送门

测试用例

1. 输入的数据都是整型

2. 输入的数据存在非法字符

Python product函数介绍

​product(A,B)函数,返回A和B中的元素组成的笛卡尔积的元组,具体见如下代码:import itertools

for item

本文参考了:How the heck does async/await work in Python 3.5?

PEP 380: Syntax for Delegating to a Subgenerator

yield 和 yi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值