- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python中xrange与yield的用法实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例分析了Python中xrange与yield的用法。分享给大家供大家参考,具体如下:
range和xrange 。
Python提供了生成和返回整数序列的内置函数range及xrange,虽然这两个函数在功能上是差不多的,但其实现原理还是有差别的。range(n, m)返回的是一个从n到(m-1)的连续的整数列表,而xrange(n, m)返回的却是一个特殊的目的对象,即xrange对象本身. 。
1
2
3
4
5
6
|
>>>
range
(
1
,
5
)
[
1
,
2
,
3
,
4
]
>>>
xrange
(
1
,
5
)
xrange
(
1
,
5
)
>>>
type
(
xrange
(
1
,
5
))
<
type
'xrange'
>
|
但在python2.x中xrange返回的却不是一个迭代器,所以 x = xrange(n, m), x.next()会出错。假如需要返回一个迭代器,需要调用iter(xrange(….)) 。
1
2
3
4
5
|
>>> x
=
iter
(
xrange
(
1
,
5
))
>>> x.
next
()
1
>>> x.
next
()
2
|
也就是,调用range和xrange程序在运行中占用的内存是不一样的。使用range,程序将首先生成一个list,然后再隐含调用list的iter获取元素。而使用xrange,程序在每次循环产生的是一个xrange对象,这个对象是iterable,根据返回的这个xrange对象我们可以获取元素.
生成器与yield 。
借助python的生成器,我们可以实现像内置xrange函数的生成器,但这个生成器返回的是一个又浮点型值组成的序列而不是整型序列.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>>
def
frange(start, stop, step
=
1.0
):
while
start < stop:
yield
start
start
+
=
step
>>> frange(
1.0
,
5.0
)
<generator
object
frange at
0x01343148
>
>>>
for
i
in
frange(
1.0
,
5.0
):
print
i,
1.0
2.0
3.0
4.0
>>> x
=
iter
(frange(
1.0
,
5.0
))
>>> x.
next
()
1.0
>>> x.
next
()
2.0
|
在python中,在函数体出现一个或者多个yield,这个函数就是生成器(generator)。在调用生成器的时,系统不会执行该生成器函数体。生成器被调用时将返回一个特殊的迭代器对象,这个个对象包含了生成器函数体、函数体的本地变量(包括函数体参数)以及当前的执行位置.
在调用返回的迭代器对象的next方法时,生成器将执行到下一个yield语句.
在执行完yield语句时,函数的执行将被“冻结”,保留执行的当前位置和未经使用的本地变量,并将yield语句的执行结果返回作为next方法的结果。继续调用next则继续调用yield,直到函数体运行结束或者执行了return语句(return语句不能含有表达式).
最常见的,生成器可以用来构建迭代器。假如我们需要一个从1到N,然后从N到1的数字组成的序列,可以使用生成器
1
2
3
4
5
|
>>>
def
updown(N):
for
x
in
xrange
(
1
, N):
yield
x
for
x
in
xrange
(N,
0
,
-
1
):
yield
x
>>>
for
i
in
updown(
5
):
print
i,
|
当一个函数需要返回一个列表的时候,使用生成器可能更灵活。生成器可以构建一个误解的迭代器,返回一个无限的结果序列。更进一步,生成器构建的迭代器执行的是懒计算:只有函数需要时才会计算结果.
所以假如需要对一个序列进行迭代功能,可以考虑迭代器.
希望本文所述对大家Python程序设计有所帮助.
原文链接:http://www.cnblogs.com/aademeng/articles/7262670.html 。
最后此篇关于Python中xrange与yield的用法实例分析的文章就讲到这里了,如果你想了解更多关于Python中xrange与yield的用法实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在下面的代码片段中, if evaluation_data: n_data = len(evaluation_data) n = len(training_data) eval
我正在从传感器捕获数据,并将其输出到 .dat 文件中。我想使用 gnuplot 将此信息导出到绘图中,并使其完全自主地仅显示最近 7 天收集的数据(没有对日期进行硬编码,应使用 time() 函数根
我尝试绘制一个包含 YEAR-MONTH-DAY HOUR 格式的时间戳的文件和一个由制表符分隔的正整数。 GNUPlot 似乎无法提取给定文件的开始结束时间告诉我 Warning: empty x
这个问题已经有答案了: Why doesn't modifying the iteration variable affect subsequent iterations? (10 个回答) 已关闭
片段 xi = xrange(10) zip(xi,xi) 和 xi = iter(range(10)) zip(xi,xi) 行为不同。我希望得到 [(0, 1), (2, 3), (4
我想创建一个 Highcharts xrange 图表,其中仅显示适合框/范围的数据标签。这可能吗? 目前,标签不会重叠,但在不适合时会显示在框外。 我尝试使用 xrange.dataLabels 选
我想创建一个 xrange highcharts。据此demo ,他们使用 UTC 格式创建日期,但我从 MySQL 的 json 输出是这样的 [{"y":1,"x":"2018-01-19 08:
我不确定标题的措辞是否正确,但我想做的是找到 xrange() 传递的值的总和。 理想情况下,它看起来像这样:(注意,这不是工作代码) mofthree = xrange(2, 1000, 3) mo
在 Python 中,迭代时使用 xrange() 而不是 range 更节省内存。 我遇到的问题是我想遍历一个大列表——因此我需要使用 xrange() 然后我想检查任意元素。 使用 range()
我在尝试在网络应用程序中显示 Xrange 图表时遇到问题。 一切正常,直到我尝试缩放图表并且数据输入的极端之一落在视口(viewport)之外,从那时起图形表示就不再显示。 chart: {
我想像下面这样显示我的图表。我为此使用了“xrange”类型的 Highcharts 。我正在尝试为每个数据点显示一个事件,其中将有一个开始数据和一个结束日期。 到目前为止,我能够使用 xrange
我有一个 xrange highchart,其中有一个系列,其中一些数据点具有重叠值。当鼠标指针悬停在特定数据点上时,我需要获取重叠数据点的值一次。我尝试使用系列 mouseover 事件,但从中我只
我正在尝试使用 ctypes 从内部 python 结构中提取数据。也就是说,我正在尝试读取 xrange 中的 4 个字段: typedef struct { PyObject_HEAD
为什么 zip(*[xrange(5)]*2) 给出 [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] 但是 zip(*[iter(xrange(5))]*2) 给出
我是python和django的新手。我的django在我的机器上正常运行,直到安装django-haystack。我直接从github下载django-haystack.zip,并在haystack
我正在使用此 jsfiddle 创建一个 xrange Highcharts 作为引用。 如何将值传递给列表中的“x”、“x2”、“y”值? 对于普通的柱形图/条形图,我会执行以下操作,效果很好。 v
操作 myInput 字符串以获得 myOutput 字符串的更快方法是什么? myInput = "1,3-5,7" myOutput = "1,3,4,5,7" 最佳答案 re.sub(
这个问题在这里已经有了答案: How do I concatenate two lists in Python? (31 个答案) 关闭 6 年前。 我有这个正在工作的数组: urls = [
我编写了以下代码来在文本文件中定义 4 行的 block ,如果 block 的第 2 行仅由一种字符组成,则输出该 block 。假设(并且之前已验证)第 2 行始终由 36 个字符的字符串组成。
出于好奇,我用 Python 编写了 3 个测试并使用 timeit 将它们超时: import timeit # simple range based on generator def my_ran
我是一名优秀的程序员,十分优秀!