python 装饰器,生成器,迭代器
装饰器
作用:当我们想要增强原来已有函数的功能,但不想(无法)修改原函数,可以使用装饰器解决
使用:
先写一个装饰器,就是一个函数,该函数接受一个函数作为参数,返回一个闭包,而且闭包中执行传递进来的函数,闭包中可以在函数执行的前后添加一些内容。
在需要装饰的函数前添加
@装饰器名就可以使用了,如:@zhuangshiqi
def show():
pass再使用原函数时,就已经是装饰过的了
示例1:无参无返回值
def shuai(func):
def wrapper():
print('拉风的墨镜')
func()
print('脚穿大头鞋')
return wrapper
@shuai
def mugai():
print('木盖,屌丝一枚')
mugai()示例2:带参函数的装饰器
# 带参函数的装饰器
def zhuangshiqi(func):
def wrapper(*args, **kwargs):
print('今天天气不错,出门就打到车了')
func(*args, **kwargs)
return wrapper
@zhuangshiqi
def test(n):
print('我的幸运数字为:{}'.format(n))
test(7)示例3:带参有返回值的装饰器
def zhuangshiqi(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs) + 10
return wrapper
@zhuangshiqi
def pingfang(n):
return n*n
print(pingfang(4))
生成器(generator)
列表生成式,可以快速的生成列表
# 数据量非常小,内存占用不大
l = [i for i in range(10)]
# 数据量特别大时,会造成内存占用突然增大
l2 = [i for i in range(10000)]为了解决内存突然增大问题,python引入了生成器
产生方式:
将列表生成式的[]改为()
# 数据量非常小,内存占用不大
l = [i for i in range(10)]
# 数据量特别大时,会造成内存占用突然增大
# l2 = [i for i in range(10000)]
# 生成器
l2 = (i for i in range(2))
print(type(l))
print(type(l2))
# 可以转换为列表
# print(list(l2))
# 使用next获取生成器中值,一次一个,遍历结束会报错StopIteration
# print(next(l2))
# print(next(l2))
# print(next(l2))
# 可以使用for-in遍历
for i in l2:
print(i)通过在函数中使用
yield关键字
def test(n):
l = []
for i in range(1, n+1):
l.append(i)
return l
# print(test(5))
def test2(n):
for i in range(1, n+1):
yield i t = test2(5)
for j in t:
print(j)
特性:
可以使用next获取数据,一次一个,结束时会报错
只能遍历一遍
可以转换为列表
可以使用for-in遍历
迭代器(Iterator)
定义:就是可以使用for-in进行遍历,并且可以使用next依次获取元素的对象
说明:
生成器就是一种特殊的迭代器
判断是否是迭代器
from collections import Iterator
l = (i for i in range(10))
print(isinstance(l, Iterator))字符串、列表、元组、集合、字典等都不是迭代器,他们都是可迭代对象。
可迭代对象
定义:可以使用for-in遍历的对象,我们都称之为可迭代对象
判断一个对象是否是可迭代对象
from collections import Iterable
print(isinstance(l, Iterable))
print(isinstance(lt, Iterable))
iter函数
作用:将可迭代对象转换为迭代器
使用:
lt2 = iter(lt)
print(isinstance(lt2, Iterator))
python 装饰器,生成器,迭代器的更多相关文章
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
- Python装饰器、迭代器&生成器、re正则表达式、字符串格式化
Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
- python装饰器、迭代器、生成器
装饰器:为已存在的函数或者或者对象添加额外的功能 def wrapper(f): #装饰器函数,f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事' ...
- 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化
文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...
- python三大器(装饰器/生成器/迭代器)
1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 @外层函数 def ...
- python — 装饰器、迭代器
目录 1 装饰器 2 迭代器 3 可迭代对象 1 装饰器 1.1目的.应用场景: 目的: 在不改变原函数内部代码的基础上,在函数执行前后自定义功能. 应用场景: 想要为函数扩展功能时,可以选择用装饰器 ...
- python第六章:三大利器(装饰器,迭代器,生成器)--小白博客
python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...
- Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)
Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数
- Python之装饰器、迭代器和生成器
在学习python的时候,三大“名器”对没有其他语言编程经验的人来说,应该算是一个小难点,本次博客就博主自己对装饰器.迭代器和生成器理解进行解释. 为什么要使用装饰器 什么是装饰器?“装饰”从字面意思 ...
- python装饰器,迭代器,生成器,协程
python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...
随机推荐
- 使用Aria2+Aria2Ng+OneIndex+OneDrive建立不限流量/离线BT下载/在线观看网盘/在线存储分享平台
获取OneDrive 自行搜索或者宝购买 安装 1.安装宝塔 #Centos系统 yum install -y wget && wget -O install.sh http://do ...
- Java模拟实现百度文档在线浏览
Java模拟实现百度文档在线浏览 这个思路是我参考网上而来,代码是我实现. 采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper ...
- Beego开启热升级
1.打开配置 beego.BConfig.Listen.Graceful = true 2.写入pid 程序入口main()函数里写入pid func writePid() { fileName := ...
- markdown-博客编辑
1. 快捷键 2. 基本语法 2.1 字体设置斜体.粗体.删除线 2.2 分级标题 2.3 链接 2.4 分割线 2.5 代码块 2.6 引用 2.7 列表 2.8 表格 3. 常用技巧 3.1 换行 ...
- 使用 Vulkan * API 并行渲染对象
Vulkan API 是业界最热门的新技术之一.它们支持多线程编程,可以简化跨平台开发,而且主要的芯片.GPU 和设备制造商都为其提供支持.Vulkan API 有望成为未来主流图形渲染平台之一.该平 ...
- spring 给容器中注册组件的几种方式
1.@Bean 导入第三方的类或包的组件 2.包扫描+组件的标注注解(@ComponentScan: @Controller,@service,@Reponsitory,@Componet), 自己写 ...
- 在依赖的框架中已经有统一异常处理的情况下,如何定制自己的统一异常处理spring boot版本
spring boot 环境下的统一异常处理大家已经非常熟悉了,不熟悉的化可以参考 <<Spring Boot中Web应用的统一异常处理>>.公司内部的统一异常处理如下: @E ...
- 服务器iptables规则记录
很多时候,我在我自己的VPS上面部署了Cobalt Strike,可是网上很多叼毛就会扫描我们的VPS,然后发现我们的Cobalt Strike,如果你还建有web delivery,还会被人家下载上 ...
- 【神经网络与深度学习】gflags介绍
gflags是什么: gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt. gflags使用起来比getopt方便,但是不支持参数的简 ...
- Sql Server使用TOP实现Limit m,n的功能
转载自:https://blog.csdn.net/weixin_41798450/article/details/88885891 在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的 ...