python3--生成器

# Auther: Aaron Fan

"""生成器:只有在调用的时候才会生成相应的数据(调用到这个数据的时候才会生成这个数据,没有调用到时就没有这个数据)只记录数据的当前位置

生成器不能像普通的列表一样,通过下标或者切片的方式去取生成器只能通过 循环 或者__next__()(2.x中用next())方法去取。"""

# 创建生成器

"""# 方法一:generator1 = ( i*i for i in range(10) )for i in generator1:    print(i)"""

# 生成一个列表,保存一个计算20次的斐波那契数列:# 斐波那契数列:除第一个和第二个数外,任意一个数都可由前两个数相加得到。

"""# 普通的方法,用一个函数实现:def fib(max):    n, a, b = 0, 0, 1    while n < max:        print(b)        a, b = b, a + b # 注意,赋值语句a, b = b, a + b                        # 相当于:                        # t = (b, a + b)    #t是一个tuple(元组)                        # a = t[0]                        # b = t[1]        n += 1    return ‘done‘fib(20)"""

# 方法二:# 使用生成器,来生成一个斐波那契数列:def fib(max):    n, a, b = 0, 0, 1    while n < max:        yield b # 注意这里的区别        a, b = b, a + b # 注意,赋值语句a, b = b, a + b                        # 相当于:                        # t = (b, a + b)    #t是一个tuple(元组)                        # a = t[0]                        # b = t[1]        n += 1    # 这个函数因为使用了yield,它便不能再称之为函数,而应该称之为生成器    # 而这里的return的返回值,值返回给一个异常状态下的值    # 比如这里当所有数据都生成完成后,没有数据了,会返回这么一个异常:StopIteration: done,这个done是可以自定义的,就是通过下面的这个return    return ‘done‘fib_generator = fib(20)print(fib_generator)print(fib_generator.__next__())print(fib_generator.__next__())print(fib_generator.__next__())print(fib_generator.__next__())print(fib_generator.__next__())print(fib_generator.__next__())print(fib_generator.__next__())print(‘start fib_generator:‘)#for i in fib_generator: # 注意:前面因为已经使用next方法,取过几个数据了,所以这里直接从最后一次取值的地方开始循环#    print(i)while True:    try:        fib_value = fib_generator.__next__()        print("fib_value: %s" % fib_value)    except StopIteration as fibs:        print("Generator return value: %s " % fibs.value)        break
时间: 2024-10-22 16:34:47

python3--生成器的相关文章

python3 生成器表达式

生成器表达式 [i for i in range(100)] #列表解析 与列表解析的不同是,列表解析用中括号,生成器表达式用小括号 g = (i for i in range(1000)) #生成器表达式 #不用yield的表达形式 print(g) #这是一个迭代对象 print(next(g)) #next(g) == g.__next__() #next(g)相当于g.__next__() print(next(g)) #next(g) == g.__next__() print(nex

python3 - 生成器genarator

在Python中,这种一边循环一边计算的机制,称为生成器:generator. 生成器保存的是算法,每次调用 next() ,就计算出 下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出 StopIteration 的异常当然,这种不断调用 next() 实在是太变态了,正确的方法是使用 for 循环,因为生成器也是可迭代对象.所以,我们创建了一个生成器后,基本上永远不会调用 next() ,而是通过 for 循环来迭代它,并且不需要关心 StopIteration 异常. 创建生成

python3 生成器&amp;迭代器

#Author by Andy#_*_ coding:utf-8 _*_import timefrom collections import Iterable#列表生成式 def func(): list=[] for i in range(10000000): list.append(i) print(list)#print(list)#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]generator=(i for i in range(10)) #print(type

python3 生成器初识 NLP第五条

话不多说,先把第五条抄一遍: 五,沟通的意义在于对方的回应 沟通没有对与错,只有“有效果”或者“没有效果”之分. 自己说得多“对”没有意义,对方收到你想表达的讯息才是沟通的意义. 因此自己说什么不重要,对方听到什么才是重要. 话有很多种方法说出来,使听着完全收到讲者意图传达的讯息,便是正确的方法. 沟通的效果,来自声调和身体语言的文字更大. 沟通讯息的送出与接受在潜意识层面的比意识层面的大得多. 没有两个人对同样的讯息有完全相同的反应. 说话的效果由讲者控制,但由听着决定. 改变说的方法,才有机

函数—函数进阶(二)

函数-函数进阶(二) 函数-函数进阶-列表生成式 1 #列表回顾 2 name = [2,5,7,9,4] 3 print(name) 4 for i in name: 5 print(i) 6 #结果为: 7 # [2, 5, 7, 9, 4] 8 # 2 9 # 5 10 # 7 11 # 9 12 # 4 13 14 #枚举 15 for index,i in enumerate(name): 16 print(index,i) 17 #结果为: 18 # 0 2 19 # 1 5 20

python014 Python3 迭代器与生成器

Python3 迭代器与生成器迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式..迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退.迭代器有两个基本的方法:iter() 和 next().字符串,列表或元组对象都可用于创建迭代器:实例(Python 3.0+) >>>list=[1,2,3,4] >>> it = iter(list) # 创建迭代器对象 >>&g

s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法

python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf-8_*_ 或者将字符串单独声明: a = "中文".encode("utf-8") 函数式编程 函数式编程中的函数指代的是数学中的函数. 函数式编程输入如果确定,则输出一定是确定的.函数中并没有很多逻辑运算 python是一个面向对象的语言,只是一部分支持函数式编程.

Python3.2官方文档翻译--生成器以及生成器表达式

6.10 生成器 生成器是一个创建迭代器的简单而有力的工具.它们书面写时就像规范的函数,但是用yield语句在任何时候都可以返回数据.每次在它上调用next()方法,生成器继续回到一起它离开的位置.(它记录所有数据值以及最后执行的语句).下面自己就是展示生成器如何方便创建: 用生成器可以做任何于底层迭代器相关的事情,正如前面章节中描述的.让生成器更加紧凑的办法就是自动创建的_iter_()和_next_()方法. 生成器其他重要的特性就是在调用过程中局部变量和执行状态可以自动的保存.这让函数更加

Python3.x:生成器简介

Python3.x:生成器简介 概念 任何使用yield的函数都称之为生成器:使用yield,可以让函数生成一个序列,该函数返回的对象类型是"generator",通过该对象连续调用__next__()方法返回序列值: 实例 生成器函数只有在调用__next()__方法的时候才开始执行函数里面的语句,例如: def count(n): while n > 0: yield n #生成值:n n -= 1 使用yield,可以让函数生成一个序列,该函数返回的对象类型是"g

Python3 三元表达式、列表推导式、生成器表达式

Python3 三元表达式.列表推导式.生成器表达式 三元表达式 表达式中,有三个元素 name = input("请输入姓名: ")ret = '输入正确' if name == 'aaa' else '输入错误'print(ret)  列表推导式 #1.示例# 方法1egg_list1 = []for i in range(10): egg_list1.append('鸡蛋%s' % i)print(egg_list1) #方法2egg_list2 = ['鸡蛋%s' %i for