zoukankan      html  css  js  c++  java
  • 生成器

    生成器

    一、什么是生成器

    生成器本质上就是迭代器,同时也不仅仅是迭代器,除了迭代器其他用途也不是很多,所以他其实就是一个自定义迭代器

    二、yield关键字

    在这之前我们先来看看什么是迭代器对象,也就是迭代器对象具有

    具有__iter__, __next__的方法

    我们再来看一段代码

    def func():
        return 123
    f = func():
    print(f)  #123
    #我们调用了func函数,那他当然是123了
    

    那么我们来看一下returnyield到底有什么区别呢?

    我们再来看一段代码

    def func():
        yield 456   # yield会使函数func()变成生成器对象,因此他就具有__iter__方法
        print(789)  # yield会停止函数,当运行下一次next才会继续运行下面的代码
        yield 12345  # 一个yield对应一个next
        print(369789)
    f = func()  #生成器
    print(f)   # <generator object func at 0x000001F0E44237D8>
    f_iter = f.__iter__()
    print(f_iter.__next__())
    print(f_iter.__next__())
    print(f_iter.__next__())
    

    这就表现出了returnyield的区别

    二、yield和return的区别

    yield的三个特性

    1.yield可以把函数变成生成器(自定制的迭代器对象,具有__iter____next__方法)

    2.yield可以停止函数,下一次next再次运行yield下面的代码

    3.有n个yield生成器就有n个元素,就可以next n次,第n+1次next会报错

    return的特性

    1.返回值

    2.终止函数

    二、用生成器自定制一个range方法

    1. 生成一个可迭代器对象 --- 》 我要把我的range函数变成一个可迭代对象(迭代器对象)
    2. 丢一个10进去,然后通过for循环的迭代next会丢出0,1,2,3,4,5,6,7,8,9
    def range(x):
        count = 0
        while count < x:
            yield count
            count += 1
    for i in range(10):
        print(i)
    
    def range (start,end,step):  #有三个参数的range循环
        start = 0
        while start<end:
            yield start
            start +=step
    for i in range(1,20,2):
        print(i)
    
  • 相关阅读:
    Sysenter/Kifastcallentry hook 检测与恢复
    几种Windows进程通信
    漫谈IRP
    RC4加密算法
    在线考试系统基础模块开发(RBAC)
    在线考试系统项目环境搭建
    在线考试系统考试模块完善
    在线考试系统题库管理
    在线考试系统数据统计模块
    在线考试系统在线考试模块
  • 原文地址:https://www.cnblogs.com/yanjiayi098-001/p/11348486.html
Copyright © 2011-2022 走看看