开发者社区> 游客bfaouujyqeyxa> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

python装饰器以及用法

简介: python装饰器以及用法
+关注继续查看

什么是装饰器

先介绍三个相关概念

1.什么是一等对象

1).对象在函数运行时创建。

  2).能赋值给变量或者作为数据结构中的元素。

  3).能作为参数传递

  4).能作为返回值返回

python 中所有的对象【字符串、列表、元组、字典、集合等等】 都是一等对象


2.高阶函数

1)将函数作为参数传递

2)将函数作为返回值返回

满足其一就是高阶函数。


3.闭包

闭包必须满足以下三个条件:

1).必须使用嵌套函数

2).外层函数必须将内层函数作为返回值返回

3).内层函数必须使用外层函数的变量

4.装饰器

我理解的装饰器就时一个闭包。只是这个闭包有点特殊。

1).外层函数的必须将一个函数作为参数

2).内层函数应该使用不定长参数,与不定长关键字参数【*args,**kwargs】作为参数

装饰器的两种用法

假设我们有两个函数,求任意个数字的和及任意两个数字的乘积

要求:让我们在函数前面及后面打印当前系统时间

def function(*a):# 求任意个数的和
    return sum(a)

def multiple(a,b):# 求任意两个数字的乘积
    return a * b

# 创建装饰器
def decorator(old):
    def inner(*args,**kwargs):
        print("开始执行时间:",time.strftime("%H:%M:%S",time.localtime(time.time())))
        g = old(*args,**kwargs)
        print("结束执行时间:",time.strftime("%H:%M:%S",time.localtime(time.time())))
        return g
    return inner

第一种,直接调用

add = decorator(function)
# 求任意数字的和
result_1 = add(1,23,4,5,6,67,8)
print(result_1)
result_2 = add(2,3)
print(result_2)


mul = decorator(multiple)
# 求任意两个数字的积
result_1 = mul(2,4)
print(result_1)
result_2 = mul(2,4)
print(result_2)

image.png

第二种,使用@

在任何想要使用装饰器的函数的上面使用 【@ + 装饰器名字】

# 修改

# 创建装饰器
def decorator(old):
    def inner(*args,**kwargs):
        print("开始执行时间:",time.strftime("%H:%M:%S",time.localtime(time.time())))
        g = old(*args,**kwargs)
        print("结束执行时间:",time.strftime("%H:%M:%S",time.localtime(time.time())))
        return g
    return inner

@decorator
def function(*a):# 求任意个数的和
    return sum(a)

@decorator
def multiple(a,b):# 求任意两个数字的乘积
    return a * b

# 调用
result = function(1,35,576,8)
print(result)

result = multiple(2,99)
print(result)

image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
详解Python闭包与装饰器
详解Python闭包与装饰器
22 0
Python的闭包和装饰器
什么是装饰器? 装饰器(Decorator)相对简单,咱们先介绍它:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”,听起来有点绕,没关系,直接看示意图,其中 a 为与装饰器 @a 对应的函数, b 为装饰器修饰的函数,装饰器@a的作.
1186 0
python闭包以及装饰器
通俗的定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。它只不过是个“内层”的函数,由一个名字(变量)来指代,而这个名字(变量)对于“外层”包含它的函数而言,是本地变量; 1 #示例一: 2 #!/usr/bin...
1024 0
图解爬虫,用几个最简单的例子带你入门Python爬虫
爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独爱Python。之所以偏爱Python就是因为她简洁的语法,我们使用Python可以很简单的写出一个爬虫程序。本篇博客将以Python语言,用几个非常简单的例子带大家入门Python爬虫。
62 0
python爬虫实战实现XPath和lxml | python爬虫实战之六
本节介绍了用XPath类似于路径的设计遍历或者查询其中的某些元素或者元素的属性。
1064 0
如何开始写你的第一个python脚本——简单爬虫入门!
好多朋友在入门python的时候都是以爬虫入手,而网络爬虫是近几年比较流行的概念,特别是在大数据分析热门起来以后,学习网络爬虫的人越来越多,哦对,现在叫数据挖掘了! 其实,一般的爬虫具有2个功能:取数据和存数据!好像说了句废话。
1432 0
Python爬虫入门一之综述
大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验。 Python版本:2.7,Python 3请另寻其他博文。 首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓
3172 0
8
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载