python中xrange和yield的用法

时间:2022-08-30 14:01:30

相信很多人对xrange和yield都不是很清楚,网上很多文章也是写的云里雾里的,今天我用最简单的例子给大家说下。

说起xrange的时候就一定要提range,其实xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。

>>> xrange(5)
xrange(5)
>>> list(xrange(5))
[0, 1, 2, 3, 4]
>>> xrange(1,5)
xrange(1, 5)
>>> list(xrange(1,5))
[1, 2, 3, 4]
>>> xrange(0,6,2)
xrange(0, 6, 2)
>>> list(xrange(0,6,2))
[0, 2, 4]

由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。

xrange 和 range 这两个基本上都是在循环的时候用。

for i in range(0, 100):
    print i

for i in xrange(0, 100):
    print i
这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:

a = range(0,100)

print type(a)

print a

print a[6]

<type 'list'>

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

5

b = xrange(0,100)

print type(b)

print b

print b[6]

<type 'xrange'>

xrange(100)

5

总结:通过上面的实例我们可以知道python的xrange和range相比,不同点就在于xrange生成的不是一个数组,而是一个生成器。

yield也是同样的道理,看实例1

def spam():

yield 1

yield 2

yield 3

print spam

<function spam at 0x1006f5488>

for item in spam():

print item

1

2

3

或者通过next()访问

gen = spam()

gen.next()

gen.next()

gen.next()

1

2

3

实例2

def AlexReadLine():
seek = 0
while true:
with open("temp.txt","r") as f:
f.seek(seek)
data = f.readline()
if data:
seek = f.tell()
yield data
else:
return print AlexReadLine()
<generator object AlexReadLine at 0x1006f5488>
for item in AlexReadLine()
print item hello
world

说明:只有在访问的时候才会打印数据

用一个我工作用到的小实例来一起介绍下这两个生成器的使用:

#encoding=utf=8

def foo(l,n):
for x in xrange(0,len(l),n):
yield l[x:x+n]
mm = range(21)
for aa in foo(mm,3):
print aa

[0, 1, 2]

[3, 4, 5]

[6, 7, 8]

[9, 10, 11]

[12, 13, 14]

[15, 16, 17]

[18, 19, 20]

python中xrange和yield的用法的更多相关文章

  1. python中xrange用法分析

    本文实例讲述了python中xrange用法.分享给大家供大家参考.具体如下: 先来看如下示例: >>> x=xrange(0,8) >>> print x xra ...

  2. Python中生成器和yield语句的用法详解

    Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流&quot ...

  3. 简单说明Python中的装饰器的用法

    简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下   装饰器对与 ...

  4. Python中【&lowbar;&lowbar;all&lowbar;&lowbar;】的用法

    Python中[__all__]的用法 转:http://python-china.org/t/725 用 __all__ 暴露接口 Python 可以在模块级别暴露接口: __all__ = [&q ...

  5. python中enumerate()函数用法

    python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6]  请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...

  6. Python中try&period;&period;&period;except&period;&period;&period;else的用法

    Python中try...except...else的用法: try:    <语句>except <name>:    <语句>          #如果在try ...

  7. Python中logging模块的基本用法

    在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...

  8. &lpar;转&rpar;Python中的split&lpar;&rpar;函数的用法

    Python中的split()函数的用法 原文:https://www.cnblogs.com/hjhsysu/p/5700347.html Python中有split()和os.path.split ...

  9. Python中zip&lpar;&rpar;与zip&lpar;&ast;&rpar;的用法

    目录 Python中zip()与zip(*)的用法 zip() 知识点来自leetcode最长公共前缀 Python中zip()与zip(*)的用法 可以看成是zip()为压缩,zip(*)是解压 z ...

随机推荐

  1. 简化注解shh框架

    找到上次我们搭建的SSH框架 浏览一下原始的applicationContext.xml文件中的部分配置. <bean id="myIndexAction" class=&q ...

  2. 控制input标签中只能输入数字以及小数点后两位

    js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { ...

  3. 《DON&&num;39&semi;T MAKE ME THINK》&sol;《点石成金访客至上的网页设计秘笈》 读书笔记

    1.web页面要尽可能简单,让用户不用思考就能知道页面的功能,如果要进行一些崭新的.开拓性的或者非常复杂的页面设计时, 此时要利用页面元素的外观.精心选择的名称.页面布局以及少量仔细斟酌过的文字,使页 ...

  4. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  5. STC89C52单片机内部EEPROM驱动

    STC89C52单片机自身带有4K的存储空间,分为8个扇区,每个扇区512字节,第一扇区起始地址为:0x2000, 结束地址为:21FF, 第八扇区起始地址为0x2E00,结束地址是2FFF #inc ...

  6. (转载)StringGrid常用属性和常用操作

    Delphi StringGrid常用属性和常用操作 StringGrid组件用于建立显示字符串的网格,与电子表格相似.它可使表格中的字符串和相关对象操作简单化.StringGrid组件提供了许多可控 ...

  7. Chessboard(规律)&amp&semi;&amp&semi;阿里巴巴和n个大盗&lpar;规律&rpar;

    Chessboard Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. Linux 下github的使用

    *初始化git仓库,使用git init命令 *添加文件到git仓库分两步: 1.使用git add filename  :可分多次使用,添加多个文件到暂存区 2.使用git commit -m  “ ...

  9. MySQL的一些基本命令笔记&lpar;4&rpar;

    delete 语句嵌套子查询: delete from 表名1 where 列名 操作符 (select 列名 from 表名2 where 条件); 示例: delete from customer ...

  10. vue--transition-group

    1.为什么要使用<transition-group> <transition></transition>是vue封装的过渡组件 <transition nam ...