小白的Python之路 day4 生成器并行运算

综合编程 2017-12-31

一.概述

我们已经明白生成器内部的结构,其实就是通过像函数这样的东西实现的!

多线程和单线程:简单来说多线程就是并行运算,单线程就是串行运算

二.生成器执行原理

第一步:生成一个生成器

第二步:执行第一个next方法,开始调用函数,执行到yield时中断,把返回值返回给变量(moon_cake):

下面有next有几次执行几次这样的返回,但是返回的值是none

从上面可以看出send()和__next__()方法的区别:

1.__next__()只是调用这个yield,也可以说成是唤醒yield,但是不不会给yield传值。

2.send()调用这个yield或者说唤醒yield同时,也活给yield传一个值。

3.使用send()函数之前必须使用__next__(),因为先要中断,当第二次调用时,才可传值。

为什么给吃月饼的人传值时,必须先执行__next__()方法?

如果不执行一个__next__()方法,只是把函数变成一个生成器,你只有__next__()一下,才能走到第一个yield,然后就返回了,调用下一个send()传值时,才会发月饼.

单线程通过生成器可以进行并行效果,原理(实际上还是串行的,但是因为我在不同的角色之间进行切换,并且因为运行速度特别快,你感觉上是并行的)

这实际上是异步IO的雏形,单线程向的并行效果,称之为协程(协程比线程更小的一个单位,他寄生在线程里)

以后还会具体讲协程,这里只是提一下,协程还是很牛x的.

您可能感兴趣的

Static Site Generator in Python Static site generators are all the rage lately. This very website that you are reading is also powered by a static site generator and I love it. But w...
Python进阶_面对对象&面对过程 这节主要讲面对对象与面对过程两种编程思想的主要区别。 一. 简单对比 面向过程是一种基础的方法,它考虑的是实际的实现步骤,一般情况下,面向过程是自顶向下逐步求精,其最重要的是模块化的思想方法。 面向对象的方法主要是把事物给对象化,包括其属性和行为。在面对对象编程中,每个对象都可以接...
Random Forest Algorithm with Python and Scikit-Lea... Random forest is a type of supervised machine learning algorithm based on ensemble learning . Ensemble learning is a type of learning where you jo...
Real-time 3D visualization of geospatial data with... Real-time 3D visualization of geospatial data with Blender This is material for the FOSS4G workshop held in Boston, MA in August 14, 2017. ...
python web py入门(43)- jQuery 事件 – ready() 方法... 在前面学习了怎么样下载jQuery库,并且进行初步的例子进行运行,在里面使用这样一行代码: jQuery(document).ready( function(){ 在这行代码里,jQuery(document)是表示什么呢?其实它是表示jQuery对象,并且根据参数document来创建一...