Python day17_协程

作者: g_s_007 | 来源:发表于2018-05-25 22:31 被阅读0次

协程的引入

要讲协程 先要知道什么是迭代对象 迭代器 以及生成器

迭代对象

迭代: 使用for循环遍历取值的过程就叫做迭代
可迭代对象: 能够使用for循环遍历取值的对象就是可迭代对象
可迭代对象有:元组,列表,字典,字符串,集合,range

判断对象是否是可迭代对象

from collections import Iterable # 导入模块
# 判断对象是否是可迭代对象
result = isinstance((3, 5), Iterable)
print("元组是否是可迭代对象:", result)

result = isinstance([3, 5], Iterable)
print("列表是否是可迭代对象:", result)

result = isinstance({"name": "zs"}, Iterable)
print("字典是否是可迭代对象:", result)

result = isinstance("hello", Iterable)
print("字符串是否是可迭代对象:", result)

result = isinstance({2,45,43}, Iterable)
print("集合是否是可迭代对象:", result)

result = isinstance(range(3), Iterable)
print("range是否是可迭代对象:", result)

result = isinstance(4, Iterable)
print("int对象是否是可迭代对象:", result)

result = isinstance(4, int)
print("int对象是否是int类型:", result)
##结果导出都是True

# 扩展:-以后可以通过isinstance判断函数的参数或者方法的参数是否是指定类型

可迭代对象与迭代器

在类里面提供了__iter__方法创建的对象就是可迭代对象
    迭代器对象: 在类里面提供__iter__和__next__的方法创建的对象就是迭代器对象
    迭代器的作用: 记录当前数据的位置以后获取下一个位置的值
    # iter函数:获取可迭代对象的迭代器, 会调用可迭代对象身上的__iter__方法
    # next函数:获取迭代器中下一个值,会调用迭代器对象身上的__next__方法

生成器

生成器: 是一个特殊的迭代器,也就是说生成器依然可以使用next函数和for循环遍历取值
两种生成器的方式:
方式一:
my_generator = (i * 2 for i in range(10))
print(my_generator)
方式二:
使用yield,只要在def里面看到yield表示生成器
应用:
生成器完成斐波那契数列

def fibnacci(num):
    # 记录前面两个值
    a = 0
    b = 1
    # 设置下标,记录生成的数据个数
    index = 0
    # 循环判断条件是否成立
    while index < num:
        result = a
        a, b = b, a + b
        # 不要忘记索引每次加上1
        index += 1
        # 代码执行yield会暂停,把结果返回给外界,再次启动生成器会在暂停的位置继续往下执行
        params = yield result
        print(params)

fib = fibnacci(5)
# result = next(fib)
# print(result)
#
# # # 调用生成器的send方法
# # 可以根据参数判断是否可以停止迭代,执行return关键字就可以停止
# result = fib.send("ok")
# print(result)

result = fib.send(None)
print(result)

result = fib.send("xxx")
print(result)

# 总结: send可以给生成器传参数,但是第一次启动生成器只能传None,一般第一次启动生成器使用next函数

相关文章

  • Python day17_协程

    协程的引入 要讲协程 先要知道什么是迭代对象 迭代器 以及生成器 迭代对象 迭代: 使用for循环遍历取值的过程就...

  • python异步协程(aiohttp,asyncio)

    python异步协程 环境:python3.7.0 协程 协程,英文叫做 Coroutine,又称微线程,纤程,协...

  • asyncio + asyncio 异步编程实例

    协程用法 接下来,我们来了解下协程的实现,从 Python 3.4 开始,Python 中加入了协程的概念,但这个...

  • Python 协程

    仅供学习,转载请注明出处 协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个...

  • 协程

    1.协程 协程,又称微线程,纤程。英文名Coroutine。 1.1 协程是什么 协程是python个中另外一种实...

  • Python并发编程——协程

    摘要:Python,协程,gevent 协程基本概念 协程,又称微线程,纤程。英文名Coroutine,是Pyth...

  • 协程介绍

    协程 协程,又称微线程,纤程。英文名Coroutine。 1.协程是什么? 协程是python个中另外一种实现多任...

  • 4-7

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • 协程

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • Python 协程 异步资料记录

    1. Python3.5协程原理 详细说明了Python协程产生的历史. 研究明白之后,写一篇文章,解释协程,并附...

网友评论

    本文标题:Python day17_协程

    本文链接:https://www.haomeiwen.com/subject/cvqpjftx.html