python生成式生成器详细解答

Python得yield关键字,yield是python中的生成器
了解生成器须要先了解什么是生成式,切片的目的是从已有的列表中切出一部分返回,而生成式的目的则是从无到有的构建一个列表
一个生成式的案例
假如构建一个含有10个元素的列表,能够怎么作?
这里可使用python的一个内置函数range来生产一些数字,而后利用循环填充到一个列表中
python

list = []
for i in range(1,11):
    list.append(i)
    print(list)

那么使用生成式应该怎么实现呢?
数据结构

list = [x for x in range(1,11)]
print(list)

生成式还能够像for同样支持嵌套,支持多级嵌套
因为生成式只能采用[]这种方式,因此只能生产list类型的数据结构,因此生成式,一般状况下咱们称之为:列表生成式
同时也能够用来生成集合,只要把[]替换成{}


一个实例
app

l = {x for x in range(1,11)}


print(l)
固然能够写成
函数

print({x for x in range(1,11)})


python语句越简洁越好,这就是python所追求的简洁


生成器是什么?
生成器是这样一个函数,记住上一次返回时在函数体重的位置,对生成器函数的第二次调用跳转至该函数中间
上次调用的全部局部变量都不变
yield生成器
生成器就是迭代器,生成器就是一种迭代器,生成器拥有next方法而且行为与迭代器彻底相同,所以
生成器也能够用于python的for循环当中

yield指令,能够暂停一个函数并返回中间结果,使用该指令的函数保存执行环境,而且在必要时回复,
生成器比迭代器更增强大也更加复杂

在python当中,当你定义了一个函数,使用了yield关键字时,这个函数就是一个生成器
函数返回的是一个对象,不是日常函数所用的return语句那样获得的是结果值。
生成器对象支持几个方法next(),send(),throw()

怎样理解?
一个实例:
code

def get():
    yield 0
    yield 1
    yield 2
get()
调用这个函数获得的结果是<function get 0x00B2CB70>

说明这确实是一个函数类型,

对象

g=get()


第一次调用生成器的next方法时,生成器才开始执行生成器函数
知道遇到yield暂时中止执行,而且yield的参数将做为这次next方法的返回值
get

next(g)     0
以后每一次调用生成器的next方法,生成器将从上次暂停执行的位置恢复执行
生成器函数,直到咱一次遇到yield时暂停,一样的yield的参数将做为next犯方法的返回值
next(g)     1
def fib():
    a,b=0,1
    while True:
        yield b
        a,b=b,a+b
for num in fib():
    if num>100:
        break
    print(num)


那么send()方法呢。
send是恢复生成器的方法,yield能够有一个值,而这个值是在生成器的send方法被调用从而恢复执行的,调用send方法的参数
io

def repeater():
    n=0
    while True:
        n=yield n
r=repeater()
next(r)
r.send(10)

调用send传入非None值前,生成器必须处于挂起状态,不然会抛出异常
不过,未启动的生成器仍可使用None做为参数调用send

print list,type(list)
如何生成斐波那契数列?

清单1.简单输出斐波那契数列的前N个数
for循环

def fab(max):
    n,a,b=0,0,1
    L=[]
    while n<max:
        L.append(b)
        a=b
        b=a+b
        n=n+1
    return L
for n in fab(5):
    print n

初学python不久,综合整理的文章,若有不足或者错误,欢迎你们指责。
function

相关文章
相关标签/搜索