python yield关键词使用总结

python yield关键词使用总结

by:授客 QQ1033553122

测试环境

win10

python 3.5

yield功能简介

简单来说,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator

代码演示

例子1: 输出斐波那契數列前 N 个数

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

__author__ = ‘shouke‘

 

 

def fab(max):

n, a, b = 0, 0, 1

result = []

while n < max:

result.append(b)

a, b = b, a + b

n = n + 1

return result

for n in fab(5):

print(n)

 
以上代码虽然可以满足需求,但是存在的问题:该函数在运行中占用的内存会随着参数 max 的增大而增大,如果要控制内存占用,最好不要用 List
 
改进 使用yield

def fab(max):

n, a, b = 0, 0, 1

while n < max:

yield b      # 使用 yield

        a, b = b, a + b

n = n + 1

for n in fab(5):

print(n)

 

例子2:读二进制方式取文件并生成文件副本

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

__author__ = ‘shouke‘

 

 

def read_file(fpath):

BLOCK_SIZE = 1024

with open(fpath, ‘rb‘) as f:

while True:

block = f.read(BLOCK_SIZE)

if block:

yield block

else:

return

with open(‘D:\Downloads\\channels-2.1.7-copy.tar.gz‘, ‘wb‘) as f:

for data in read_file(‘D:\Downloads\\channels-2.1.7.tar.gz‘):

f.write(data)

原文地址:https://www.cnblogs.com/shouke/p/11676978.html

时间: 2024-10-09 08:20:58

python yield关键词使用总结的相关文章

python学习第四十四天斐波那契数列和yield关键词使用

斐波那契数列是数学中的常见的算法,第一个第二个不算,从第三个开始,每个数的都是前面两个数的和,使用yield关键词把生成的数列保存起来,调用的时候再调用,下面举例说明一下 def fab(max): n, a, b = 0, 0, 1 while n < max: yield b # print b a, b = b, a + b n = n + 1 调用方式 >>> for n in fab(5): ... print n ... 1 1 2 3 5 在这里yield起到关键的作

Python yield 使用浅析

Python yield 使用浅析 作者:廖 雪峰, 软件工程师, HP 2012 年 11 月 22 日 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yield ?本文将由浅入深地讲解 yield 的概念和用法,帮助读者体会 Python 里 yield 简单而强大的功能. 您可能听说过,带有 yield 的函数在 Python 中被称之为 gen

python yield 进阶(一)

PS:硬说原创 我只能说自己太不要脸了 就当是个搬运工吧 希望对您有帮助 先来看看基础的---重头戏在后面: yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(alist): for i in alist: yield i + 1 取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每一项: alist = [1, 2, 3, 4] f

python yield用法 (tornado, coroutine)

yield关键字用来定义生成器(Generator),其具体功能是可以当return使用,从函数里返回一个值,不同之处是用yield返回之后,可以让函数从上回yield返回的地点继续执行.也就是说,yield返回函数,交给调用者一个返回值,然后再“瞬移”回去,让函数继续运行, 直到吓一跳yield语句再返回一个新的值. 使用yield返回后,调用者实际得到的是一个迭代器对象,迭代器的值就是返回值,而调用该迭代器的next()方法会导致该函数恢复yield语句的执行环境继续往下跑,直到遇到下一个y

Python yield 使用浅析 ----以裴波那契数列生成为例

转载请注明出处,http://blog.csdn.net/suool/article/details/38388681谢谢! 之前转过一篇讲Python生成器的博文,不过觉得不是很清晰,前几天见到有讲yield的文章,感觉还不错,遂整理于此,与诸君共享.愿共同进步. 我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念. 如何生成斐波那契數列 斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到.用计算机程序

python yield 进阶(二)

PS:接上一篇 本文摘自OSchina Linuxqueen 不幸的是,这样做看上去似乎不太可能.即使是我们有神奇的函数,可以让我们从n遍历到无限大,我们也会在返回第一个值之后卡住: 1 def get_primes(start): 2     for element in magical_infinite_range(start): 3         if is_prime(element): 4             return element 假设这样去调用get_primes: 1

利用 Python yield 创建协程将异步编程同步化

在 Lua 和 Python 等脚本语言中,经常提到一个概念: 协程.也经常会有同学对协程的概念及其作用比较疑惑,本文今天就来探讨下协程的前世今生. 首先回答一个大家最关心的问题:协程的好处是什么? 通俗易懂的回答: 让原来要使用 异步 + 回调 方式写的非人类代码,可以用看似同步的方式写出来. 1.回顾同步与异步编程 同步编程即线性化编程,代码按照既定顺序执行,上一条语句执行完才会执行下一条,否则就一直等在那里. 但是许多实际操作都是CPU 密集型任务和 IO 密集型任务,比如网络请求,此时不

LPTHW 笨办法学python 37章 python关键字/关键词介绍

本章简要的介绍了各种关键词: and:[布尔运算]且 del: 删除变量(函数,类) from: 从某一个库或者文件读取 not:[布尔运算]非 while: while-loop 关键字,后跟循环条件 as: 通常和import类叠加使用,代表以某个其他名称加载某个模块. elif: if分支控制的一部分. global: 声明一个变量为全局变量. or:[布尔运算]或 with:执行一个动作,通常和as一起使用,使用with后,完成动作后,必定关闭或者退出. assert: 声明一个错误.使

Python yield 浅析(转)

您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念. 如何生成斐波那契數列 斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到.用计算机程序输出斐波那契數列的前 N 个数是一个非常简单的问题,许多初学者都可以轻易写出如下函数: 清单 1. 简单输出斐波那契數列前 N 个数 def