python之yield表达式学习

yipeiwu_com6年前Python基础

python中有一个略微奇怪的表达式叫yield expression,本文就来探究一下这是个什么东西。一步一步来。

iterable

复制代码 代码如下:

mylist = [1,2,3]
for item in mylist:
    print str(item)

mylist是一个列表(list),我们可以逐条取出每一个item,这个过程叫做iteration。像list这样可以用”for…in…”依次遍历的对象被称为iterable,其他的iterable还有string、tuple、dict等。iterable的一个特点是所有的item会存储到内存中,这样会产生一些不便和不利的地方,于是催生了generator(后面讲到)。

list comprehension(列表推导式)

复制代码 代码如下:

mylist = [x*x for x in range(3)]

表达式右边是一个for循环的简写形式,用[]包裹起来(称为list comprehension),表达式的值是一个list,我们可以像普通list那样使用”for…in…”遍历其元素,如:
复制代码 代码如下:

for item in mylist:
    print str(item)
generator

generator

对上面的list comprehension稍作修改:

复制代码 代码如下:

mygenerator = (x*x for x in range(3))
for item in mygenerator:
    print item

可以看到只是把[]换成了(),这时表达式的值不再是list,而是一个generator。

generator也属于iterable,但是其调用方式非常特别。

yield

复制代码 代码如下:

def creatGenerator():
    mylist = range(3)
    for x in mylist:
        yield x*x
       
mygenerator = creatGenerator()

for x in mygenerator:
    print(x)


yield的使用方法和return是一样的。但是(重点来了):

相关文章

Django基础之Model操作步骤(介绍)

Django基础之Model操作步骤(介绍)

一、数据库操作 1、创建model表 基本结构: #coding:Utf8 from django.db import models class userinfo(models....

利用Python读取文件的四种不同方法比对

前言 大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果。下面就来看看详细的介绍吧。 场景 逐行读取一个 2.9G 的大文件...

pytorch在fintune时将sequential中的层输出方法,以vgg为例

有时候我们在fintune时发现pytorch把许多层都集合在一个sequential里,但是我们希望能把中间层的结果引出来做下一步操作,于是我自己琢磨了一个方法,以vgg为例,有点僵硬...

Python实现读取机器硬件信息的方法示例

本文实例讲述了Python实现读取机器硬件信息的方法。分享给大家供大家参考,具体如下: 本人最近新学python ,用到关于机器的相关信息,经过一番研究,从网上查找资料,经过测试,总结了...

Windows下安装Django框架的方法简明教程

Windows下安装Django框架的方法简明教程

本文实例讲述了Windows下安装Django框架的方法。分享给大家供大家参考,具体如下: 在idea上运行Python项目时,出现了如下错误,这是因为系统中只安装了Python,没有安...