python装饰器

python学习之高级特性

冷暖自知 提交于 2019-12-24 16:36:19
一、生成式 1、定义 生成式就是一个用来快速生成特定语法形式的表达式。 列表生成式:用来快速生成列表 字典生成式:用来快速生成字典 集合生成式:用来快速生成集合 2、语法格式 (1)普通的语法格式:[exp for iter_var in iterable] (2)带过滤功能语法格式: [exp for iter_var in iterable if_exp] (3)循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B] 01_列表生成式.py #需求: 生成100个1~50之间的随机数值。 import random def use_list_expression(count=100, start=0, end=50): """第一种: 使用列表生成式实现需求""" return [random.randint(start, end) for count in range(count)] def use_loop(count=100, start=0, end=50): """第二种: 使用for循环与传统的方式实现需求""" nums = [] for count in range(count): num = random.randint(start, end) nums.append

python基础-装饰器

寵の児 提交于 2019-12-24 13:08:07
python基础-装饰器 一、什么是装饰器   装饰器本质就是函数,功能是为其他函数附加功能 二、装饰器遵循的原则 1、不修改被修饰函数的源代码 2、不修改被修饰函数的调用方式 三、实现装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 示例1: 用函数实现 1 #计算从1-100,统计函数运行时间 2 3 import time 4 def cal(l): 5 start_time=time.time() 6 res=0 7 for i in l: 8 time.sleep(0.1) 9 res+=i 10 stop_time = time.time() 11 print('函数的运行时间是%s' %(stop_time-start_time)) 12 return res 13 14 print(cal(range(100))) #直接打印得到运行的时间 执行结果: 1 函数的运行时间是10.007169723510742 2 4950 示例2:用装饰器实现函数运行时间 1 import time 2 def timmer(func): 3 def wrapper(*args,**kwargs): 4 start_time=time.time() 5 res=func(*args,**kwargs) 6 stop_time = time.time() 7 print(

python—面向对象设计

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-24 01:15:31
一:三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 (类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念) (对象:就是基于类而创建的一个具体的事物 [具体存在的] 也是特征和动作整合到一起) 二:类与对象 (在python2中,分 新式类 与 经典类 ,python3统一都是新式类【新式类,class 类名:】【经典类,class 类名(object)】) class Chinese: #class是关键字,表示类名 pass print(Chinese) p1=Chinese() #实例化过程,创建对象,类名后面加括号 print(p1) 小实例 实例化,由类产生对象的过程叫做实例化,类实例化的结果就是一个对象,或者叫做一个实例 ps: 类中的函数第一个参数必须是self 类中定义的函数叫做 “方法” 类是用来描述一类事物,类的对象指的是这一类事物中的一个个体 是事物就要有属性,属性分为: 1.数据属性:就是变量 2.函数属性:就是函数,在面向对象里通常称为方法 注:类和对象均是用点来访问自己的属性 属性 类是用来描述一类事物,类的对象指的是这一类事物中的一个个体 是事物就要有属性,属性分为: 1.数据属性:就是变量 2.函数属性:就是函数,在面向对象里通常称为方法 注:类和对象均是用点来访问自己的属性 属性 1 class Chinese:

一文读懂Python 装饰器函数

笑着哭i 提交于 2019-12-23 20:06:15
【摘要】 Python装饰器的学习笔记 1. 初识装饰器 接下来,我们通过一个例子来为大家讲解这个装饰器: 需求介绍:你现在xx科技有限公司的开发部分任职,领导给你一个业务需求让你完成:让你写代码测试小明同学写的函数的执行效率。 def effectiveness(): print("华为云欢迎你") 版本1: 需求分析:你要想测试此函数的执行效率,你应该怎么做?应该在此函数执行前记录一个时间, 执行完毕之后记录一个时间,这个时间差就是具体此函数的执行效率。那么执行时间如何获取呢? 可以利用time模块,有一个time.time()功能。 import time print(time.time()) #返回 1575997129.8832688 此方法返回的是格林尼治时间,是此时此刻距离1970年1月1日0点0分0秒的时间秒数。也叫时间戳,他是一直变化的。所以要是计算shopping_car的执行效率就是在执行前后计算这个时间戳的时间,然后求差值即可。 def effectiveness(): time.sleep(2) print("华为云欢迎你") start_time = time.time() effectiveness() end_time = time.time() print("此函数的执行效率为:" + str(end_time-start_time)) 结果:

python基础—迭代器、生成器

淺唱寂寞╮ 提交于 2019-12-23 14:43:13
python基础—迭代器、生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样。 只要该对象可以实现__iter__方法,就可以进行迭代。 迭代对象调用__iter__方法会返回一个迭代器,所谓的迭代器就是具有next方法的对象。(在调用next方法时不需要任何参数)。在调用next方法时,迭代器会返回它的下一个值。如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopITeration异常。 一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象是迭代器。 迭代器也有__iter__方法。 2 迭代器特性 优点: 1 迭代器提供了一种不依赖索引的取值方式,这样就可以遍历那些没有索引的可迭代对象了(字典,集合,文件) 2 迭代器与列表比较,迭代器是惰性计算的,更节省内存 缺点: 1 无法获取迭代器的长度,使用不如列表索引取值灵活 2 一次性的,只能往后取值,不能倒着取值 迭代规则的关键是?为什么不是使用列表? 1 如果有一个函数,可以一个接一个地计算值,那么在使用时可能是计算一个值时获取一个值,而不是像列表一样获取所有的值。如果有很多值,列表会占用太多的内存。 2 使用迭代器更通用,更简单,更优雅 3 迭代器代码 (1)索引方式循环 1 2 3 4 5 6 7 l = [ 'a' , 'b' , 'c' , 'd' ] i

python 装饰器

给你一囗甜甜゛ 提交于 2019-12-22 15:12:52
装饰器的原理类似于以下函数 import time def func(): time.sleep(0.1) print('hello') def timer(f): def inner(): start=time.time() f() #被装饰的函数 end=time.time() print(end-start) return inner func=timer(func)# time(func)得到的是inner func() 以下的代码就是装饰器 def timer(f): def inner(): start=time.time() f() end=time.time() print(end-start) return inner @timer #这里相当于func=time(func) def func(): time.sleep(0.1) print('hello') func() 装饰器的作用:不想改变函数的调用方式 但是还是想在原来的函数上添加功能 来源: https://www.cnblogs.com/wind666/p/11963966.html

python装饰器最简释疑

为君一笑 提交于 2019-12-22 02:56:55
背景知识: 函数可作为变量传递 函数可作为参数传递 函数可作为返回值传递 不用装饰器实现函数如下: def func ( ) : return '函数func' def outer ( x ) : def inner ( ) : # 函数嵌套 return '戴了inner牌帽子的 ' + x ( ) # 跨域访问,引用了外部变量x return inner # 函数作为返回值 closure = outer ( func ) # 函数func作为outer的参数;函数作为变量赋给closure print ( func ( ) ) # 执行原始函数 print ( closure ( ) ) # 执行闭包 执行结果: 函数func 戴了inner牌帽子的 函数func 使用装饰器之后函数如下: def outer ( x ) : def inner ( ) : return '戴了inner牌帽子的 ' + x ( ) return inner @outer def func ( ) : return '函数func' print ( func ( ) ) 执行结果: 戴了inner牌帽子的 函数func 对比: 由上,我们可以看到加了outer装饰器的func等价于outer(func)。 装饰器@就是把 被装饰的函数 作为 参数 传递到 装饰器函数 里面加工,最后执行

python高级特性

限于喜欢 提交于 2019-12-22 00:10:25
文章目录 生成式 生成式小案例 生成器 生成器小案例 生产者-消费者模型 生成器、迭代器与可迭代对象 闭包 装饰器 生成式 列表生成式 :用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list 普通的语法 格式: [exp for iter_var in iterable] #列表生成式:生成100个1~50之间的随机数值。 #先使用空列表 循环100次 每循环一次在random.randint(1,50)中选一个值保存到[]中 print([random.randint(1,50) for i in range(1,100)]) 执行结果: [42, 8, 22, 16, 34, 8, 37, 39, 31, 30, 7, 3, 11, 17, 39, 4, 8, 8, 16, 5, 12, 27, 15, 35, 1, 9, 5, 17, 41, 9, 14, 22, 29, 16, 30, 30, 44, 40, 32, 30, 20, 2, 28, 35, 19, 21, 38, 35, 12, 42, 30, 35, 9, 35, 34, 25, 44, 6, 8, 26, 26, 13, 19, 15, 37, 40, 15, 44, 1, 16, 27, 38, 15, 44, 5, 39, 23, 25, 7,

二十三种设计模式及其python实现

核能气质少年 提交于 2019-12-20 00:46:43
本文源码寄方于github:https://github.com/w392807287/Design_pattern_of_python 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》——http://www.cnblogs.com/beijiguangyong/ 设计模式是什么? 设计模式是经过总结、优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码。反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。设计模式不会绑定具体的编程语言。一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性)。最为重要的是,设计模式也是一把双刃剑,如果设计模式被用在不恰当的情形下将会造成灾难,进而带来无穷的麻烦。然而如果设计模式在正确的时间被用在正确地地方,它将是你的救星。 起初,你会认为“模式”就是为了解决一类特定问题而特别想出来的明智之举。说的没错,看起来的确是通过很多人一起工作,从不同的角度看待问题进而形成的一个最通用、最灵活的解决方案。也许这些问题你曾经见过或是曾经解决过,但是你的解决方案很可能没有模式这么完备。 虽然被称为“设计模式”,但是它们同“设计“领域并非紧密联系。设计模式同传统意义上的分析、设计与实现不同

Python深入05 装饰器

血红的双手。 提交于 2019-12-20 00:07:16
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 装饰器 (decorator)是一种高级Python语法。装饰器可以 对一个函数、方法或者类进行加工 。在Python中,我们有多种方法对函数和类进行加工,比如在 Python闭包 中,我们见到函数对象作为某一个函数的返回结果。相对于其它方式,装饰器语法简单,代码可读性高。因此,装饰器在Python项目中有广泛的应用。 装饰器最早在Python 2.5中出现,它最初被用于加工函数和方法这样的 可调用对象 (callable object,这样的对象定义有__call__方法)。在Python 2.6以及之后的Python版本中,装饰器被进一步用于加工类。 装饰函数和方法 我们先定义两个简单的数学函数,一个用来计算平方和,一个用来计算平方差: # get square sum def square_sum(a, b): return a**2 + b**2 # get square diff def square_diff(a, b): return a**2 - b**2 print(square_sum(3, 4)) print(square_diff(3, 4)) 在拥有了基本的数学功能之后,我们可能想为函数增加其它的功能,比如打印输入