python装饰器

Python装饰器的使用

╄→гoц情女王★ 提交于 2019-12-03 11:16:33
对于python编程人员,装饰器的使用肯定是必不可少的。 装饰器分为系统定义装饰器和自定义装饰器;系统定义装饰器:@classmethod:类方法装饰器 @staticmethod: 静态方法装饰器 装饰器的本质就是一个函数,作用是在不改变源代码的情况下,给函数增加额外的功能;装饰器的使用通过@语法糖进行调用 自定义装饰器又分为: 带参的装饰器和不带参的装饰 。 先来说不带参的装饰器: # 1.声明一个普通的装饰器 # 需求:获取每个函数的运行时间 import datetime,time def get_func_time(func): # 外层作为装饰函数,必须接收参数,将被装饰函数传入 def inner(*args): # 内层实现被装饰函数的额外功能,如果被装饰函数需要传入参数,可以定义不定长参数:*args,或者关键字参数:**kwargs start_time = datetime.datetime.now() # 获取当前时间,作为开始时间 result = func(*args) # 调用传入的被装饰的函数,传入需要的参数 end_time = datetime.datetime.now() # 获取当前时间,作为结束时间 print('程序的运行时间为:', end_time - start_time) return result # 如果被装饰函数是有返回值的

Python装饰器的使用

非 Y 不嫁゛ 提交于 2019-12-03 09:17:00
简单使用 def decorator(new_func): def inner(): print("+++") new_func() return inner @decorator def show(): print("BBB") show() #结果如下: +++ BBB 装饰器带有参数的函数 def decorator(func): def inner(num1,num2): print("计算结果如下:") func(num1,num2) return inner @decorator def sum(num1,num2): result=num1+num2 print(result) sum(2,3) #结果如下: 计算结果如下: 5 通用的装饰器 def decorator(func): def inner(*args, **kwargs): print("计算结果如下", end=" ") result=func(*args, **kwargs) return result return inner @decorator def sum(num1, num2, num3): result = num1 + num2 + num3 return result result = sum(1, 2,5) print(result) #结果如下: 计算结果如下 8

python调用时间装饰器检测函数运行时间

此生再无相见时 提交于 2019-12-03 08:11:31
用一个装饰器,监控程序的运行时间 import time def count_time(func): def int_time(*args, **kwargs): start_time = time.time() # 程序开始时间 func() over_time = time.time() # 程序结束时间 total_time = over_time - start_time print('程序共计%s秒' % total_time) return int_time @count_time def main(): print('>>>>开始计算函数运行时间') x = 0 for i in range(1000000): x=x//13 print(x) if __name__ == '__main__': main() 来源: https://www.cnblogs.com/duoba/p/11784576.html

python 装饰器

旧巷老猫 提交于 2019-12-03 07:59:26
装饰器 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多初次接触这个知识的人来讲,这个功能有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都不会,别跟人家说你会Python, 看了下面的文章,保证你学会装饰器。 1、先明白这段代码 #### 第一波 #### def foo(): print('foo') foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print('foo') foo = lambda x: x + 1 foo() # 执行下面的lambda表达式,而不再是原来的foo函数,因为foo这个名字被重新指向了另外一个匿名函数 2、需求来了 初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能。业务部门使用基础功能时,只需调用基础平台提供的功能即可。如下: ############### 基础平台提供的功能如下 ############### def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') ###########

python基础面试题(全网最全!)

只愿长相守 提交于 2019-12-03 07:50:31
目录 1、为什么学习Python? 2、通过什么途径学习的Python? 3、Python和Java、PHP、C、C#、C++等其他语言的对比? 4、简述解释型和编译型编程语言? 5、Python解释器种类以及特点? 6、位和字节的关系? 7、b、B、KB、MB、GB 的关系? 8、请至少列举5个 PEP8 规范 9、通过代码实现如下转换: 10、请编写一个函数实现将IP地址转换成一个整数。 11、python递归的最大层数? 12、求结果: 13、ascii、unicode、utf-8、gbk 区别? 14、字节码和机器码的区别? 15、三元运算规则以及应用场景? 16、列举 Python2和Python3的区别? 17、用一行代码实现数值交换: 18、Python3和Python2中 int 和 long的区别? 19、xrange和range的区别? 20、文件操作时:xreadlines和readlines的区别? 21、列举布尔值为False的常见值? 22、字符串、列表、元组、字典每个常用的5个方法? 23、lambda表达式格式以及应用场景? 24、pass的作用? 25、*arg和**kwarg作用? 26、is和==的区别? 27、简述Python的深浅拷贝以及应用场景? 28、Python垃圾回收机制? 29、python的可变类型和不可变类型? 30、求结果:

Python核心技术与实战 笔记

独自空忆成欢 提交于 2019-12-03 06:30:24
基础篇 Jupyter Notebook 优点 整合所有的资源 交互性编程体验 零成本重现结果 实践站点 Jupyter 官方 Google Research 提供的 Colab 环境 安装 运行 列表与元组 列表和元组,都是 一个可以放置任意数据类型的有序集合。 l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素 l [1, 2, 'hello', 'world'] tup = ('jason', 22) # 元组中同时含有 int 和 string 类型的元素 tup ('jason', 22) 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素 (mutable) 元组是静态的,场地大小固定,无法增加删除或者改变 (immutable) 都支持负数索引; 都支持切片操作; 都可以随意嵌套; 两者可以通过 list() 和 tuple() 函数相互转换; 列表和元组存储方式的差异 由于列表是动态的,所以它需要存储指针,来指向对应的元素。增加/删除的时间复杂度均为 O(1)。 l = [] l.__sizeof__() // 空列表的存储空间为 40 字节 40 l.append(1) l.__sizeof__() 72 // 加入了元素 1 之后,列表为其分配了可以存储 4 个元素的空间 (72 -

Python基础-day12-装饰器

血红的双手。 提交于 2019-12-03 04:51:23
装饰器利用了 闭包的原理 。 以下原则需要注意,只能在外围增减功能,但是内部是不能动的。 语法糖: 获取函数的返回值: 装饰带参数的函数 : 这里是装饰器函数 假如你想装饰一个带参数的函数,如下: def func(para): print(para) 将我们的函数func交给装饰器函数处理,装饰器函数返回给我们的是具有传参能力的inner()。 我们利用这个inner(),传递参数a,实际上还是去调用func(a),也就是实现了 对带有参数的函数 进行装饰。 装饰一个 可以接收任意参数的函数 跟前面传一个参数a是一样的原理。 问题:打印func的名字时,发现为inner。 这就违背了装饰器的初衷:不修改原函数的任何功能和属性。 使用wraps后,就能让func的名字是func。 其实就是对inner函数又做了一次装饰。这次使用了wraps这个装饰器函数。 所以,到目前为止, 最完整的装饰器模板 是: from functools import wraps def wrapper(func): @wraps(func) def inner(*args, **kwargs): print('......') ret = func(*args, **kwargs) print('......') return ret return inner @wrapper def function

Python中如何使用装饰器?

大憨熊 提交于 2019-12-03 03:22:08
类方法和静态方法有点相似,他们都推荐使用类来调用(其实也可以使用对象来调用) 定义类方法 —使用@classmetho修饰(函数装饰器) —方法的第一个参数定义为cls(class的缩写),用类调用该方法时该参数会自动绑定 定义静态方法 —使用@staticmethod修饰(函数装饰器) —对方法参数没有要求,无论如何都不会自动绑定(静态方法相当于一个函数,因此不会自动绑定) 戳下方视频链接,跟我一起来听知名技术专家李刚老师对Python编程中函数修饰器的更多用法的详细解析 Python 类方法与静态方法 李刚老师出版的《疯狂Java》系列图书曾得到市场的广泛认可,经过多次再版,并被多家高校选作教材。 上方视频来自于李刚老师的在线视频课程《21天通关Python》第五章 第四节 类方法与静态方法。 大家都有学习Python的困惑,今天就给大家推荐一本巨有影响力的Python实战书,上线时间仅2个月,就超越了众多实力派,成京东和当当网上的长期畅销图书,并且收获了3.4W的五星好评。 这本书可谓是笔者独家私藏图书之一了,对我学习Python有着莫大的帮助,在京东上也常常"断货",这次拿出来给大家分享一下,希望能帮到大家。 《21天通关Python》视频课程以畅销图书为教材,由图书作者李刚亲自操刀讲解;上手门槛低,可作为0基础掌握Python教材;书籍

每日面试之 面试基础1

删除回忆录丶 提交于 2019-12-03 02:44:41
目录 面试基础1 1 、sorted和sort这俩有什么区别 2、exec() eval()的区别 3、元类可以做什么 4、新式类和经典类 5、迭代器和生成器 6.关于装饰器 7.猴子补丁 8.==和is 9.浅拷贝和深拷贝 10.可变类型和不可变类型 11.Python的自省功能 12.Python中的下划线 13only/defer/select_related/perfetch_related 14为什么学习python 15通过什么途径学习的Python? 16Python和Java、PHP、C、C#、C++等其他语言的对比? 17简述解释型和编译型编程语言? 18Python解释器种类以及特点? 19位和字节的关系? 20 b、B、KB、MB、GB 的关系? 21请至少列举5个 PEP8 规范(越多越好)。 面试基础1 1 、sorted和sort这俩有什么区别 sorted() l=[1,3] l.sort() Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。 sort是容器的函数,用List的成员函数sort进行排序 sorted是Python的内建函数相同的参数,用built-in函数sorted进行排序 sorted(iterable,key=None,reverse

python---闭包和装饰器

倖福魔咒の 提交于 2019-12-03 01:54:08
1、参考博客:https://www.cnblogs.com/3me-linux/p/6761635.html 2、闭包 def outer(): x = 1 def inner(): print x # 1 return inner foo = outer() foo.func_closure # doctest: +ELLIPSIS (<cell at 0x: int object at 0x>,) foo() 1 变量作用域:python的作用域规则下进行工作:“x是函数outer里的一个局部变量。当函数inner在#1处打印x的时候,python解释器会在inner内部查找相应的变量,当然会找不到,所以接着会到封闭作用域里面查找,并且会找到匹配。 变量生命周期:我们的变量x是函数outer的一个本地变量,这意味着只有当函数outer正在运行的时候才会存在。根据我们已知的python运行模式,我们没法在函数outer返回之后继续调用函数inner,在函数inner被调用的时候,变量x早已不复存在,可能会发生一个运行时错误。然而,它可以正常工作 闭包:Python支持一个叫做函数闭包的特性,嵌套定义在非全局作用域里面的函数能够记住它在被定义的时候它所处的封闭命名空间。这能够通过查看函数的func_closure属性得出结论,这个属性里面包含封闭作用域里面的值