Python day17_协程 - Go语言中文社区

Python day17_协程


协程的引入

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

迭代对象

迭代: 使用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函数
版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/b98c85ab9cc4
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 13:07:57
  • 阅读 ( 1134 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢