python --装饰器内容讲解
python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。
3.1 定义装饰器,定义函数。
def xxx():
函数体
3.2 应用装饰器
在需要使用的函数、方法上@xxx即可。
注意:只要函数应用装饰器,那么函数就被重新定义,重新定义为:装饰器的内层函数。
装饰器含无参数的示例:
def outer(func):
def inner():
print('hello')
print('hello')
print('hello')
#原f1函数
r = func() # r = None
print('end')
print('end')
print('end')
reture r
reture inner @outer
def f1():
return "f1" f1() #调用者 #原理:
#1、执行outer函数,并且将下面的函数名,当做参数,即f1 = func
#2、将outer的返回值重新赋值给f1 = outer的返回值
#3、新的f1函数 = inner """
输出结果:
hello
hello
hello
f1
end
end
end
"""
装饰器含传递两个参数的示例:
def outer(func):
def inner(a1, a2): #传递两个参数
print("")
ret = func(a1, a2) #传递两个参数
print("")
return ret
reture inner @outer
def index(a1, a2):
print("操作很复杂")
return a1 + a2 index(1, 2) #调用者
装饰器含N个参数的函数示例:
注意:一个函数是可以应用多个装饰器。多个装饰器时先执行最外层的装饰器。
def outer(func):
def inner(*arg, **kwargs): #可接收多个参数
print("")
ret = func(*arg, **kwargs) #可接收多个参数
print("")
return ret
reture inner @outer
def f1(arg): #传递一个参数
print("我传递了一个参数")
reture "f1" @outer
def index(a1, a2): #传递两个参数
print("我传递了一个参数")
return a1 + a2 @outer
def f2(a1, a2, a3):
print("我传递三个参数")
return "f2" f1(123) #调用者传递一个参数
index(1, 2) #调用者传递两个参数
f2(1, 2, 3) #调用者传递三个参数
python --装饰器内容讲解的更多相关文章
- python --装饰器通俗讲解
装饰器 什么是装饰器?:在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 Python中的装饰器是你进入Python大门的一道坎; 装饰器特点: 不改变原函数原代码: ...
- Python装饰器与面向切面编程
今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数 ...
- Python装饰器讲解
Python装饰器讲解 定义:本质是函数,就是为其他函数添加附加功能.原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 import time def timmer(func ...
- Python学习:11.Python装饰器讲解(二)
回顾 上一节我们进行了Python简单装饰器的讲解,但是python的装饰器还有一部分高级的使用方式,这一节就针对python装饰器高级部分进行讲解. 为一个函数添加多个装饰器 今天,老板又交给你一个 ...
- day5学python 基础+装饰器内容
基础+装饰器内容 递归特性# 1.必须有一个明确的结束条件# 2.每次进入更深一层递归时,问题规模相比上次递归应有所减少# 3.递归效率不高 def run(n): print(n) if int(n ...
- 一篇关于Python装饰器的博文
这是一篇关于python装饰器的博文 在学习python的过程中处处受阻,之前的学习中Python的装饰器学习了好几遍也没能真正的弄懂.这一次抓住视频猛啃了一波,就连python大佬讲解装饰器起来也需 ...
- Python——装饰器(Decorator)
1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起.在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶 ...
- python装饰器在接口自动化测试中的应用
在讲解装饰器在接口自动化测试项目的应用之前,我们先来介绍一下python装饰器到底是个什么 装饰器 说装饰器就不得不提一下函数这个一等公民了,在python中函数有几个特性先来了解一下 函数的一些特性 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
随机推荐
- spring aop 一个挡板例子
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann ...
- ubuntu docker 下mongodb集群和分片
首先我们计划启动了三个mongo服务:master,salve,arbiter 1.准备工作 新建文件夹如图(每个文件夹下面有db和configdb文件夹): 生成认证文件并修改权限 openssl ...
- 如何解决Requests的SSLError(转)
add by zhj: 我使用方法2“更新系统的certificate”解决了问题 原文:https://www.jianshu.com/p/8deb13738d2c 这两天在Linux上爬Googl ...
- C# yield checked,unchecked lock语句(C#学习笔记04)
特殊语句 yield语句 yield用于终止迭代 只能使用在返回类型必须为 IEnumerable.IEnumerable<T>.IEnumerator 或 IEnumerator< ...
- Python基础8
jupyter notebook 安装目录插件, 步骤
- Android-----spinner组件使用(实现下单)
list view组件和spinner组件使用方法类似,从string.xml中通过entries获取数据显示.但如果要显示的列表项无法在执行前确定,或是要在程序执行的过程中变更选项内容,通过entr ...
- .NET异步资料收集
个人认为应该是.NET关于并行编程 / 异步编程最权威的内容来源(虽然看起来里面的内容离现在已经好几年了,但是大部分内容都不过时) https://devblogs.microsoft.com/pfx ...
- 转摘Python安装与环境变量的配置
Python安装与环境变量的配置 python下载: Python安装包下载地址:http://www.python.org/ 根据实际的操作系统,安装合适的安装版本. Python安装: 本文以 ...
- Hibernate 5.x 配置 C3P0 数据库连接池
Hibernate 5.x 配置 C3P0 连接池 首先准备好需要的 jar 包,这里我准备的是 Hibernate 5.2.10 版本: hibernate-core-5.2.10.Final.ja ...
- vue脚手架引入MD5加密函数
可以在全局定义一个MD5的方法,然后引入到vue的脚手架中. 首先 npm install crypto --save 然后引用定义一个对象, import crypto from 'crypto'; ...