生成器

  • 概念:但凡在函数内部定义了一个yield,调用函数时,函数体代码不会执行,会返回一个结果,该结果就是生成器。本质上是迭代器,一个自定义的迭代器

    # python内获取迭代器的方式
    def iter_func():
    list1 = [1, 2, 3, 8, 4]
    # 获取一个迭代器
    iter_list = list1.__iter__()
    while True:
    try: # 捕获异常
    # 执行__next__取值
    print(iter_list.__next__())
    except StopIteration:
    break # 执行iter_func
    iter_func() # 自定义一个迭代器
    def func():
    print("hello world!")
    yield "dawn" res = func()
    # 直接调用,返回了一个生成器:<generator object func at 0x000002376172F1C8>
    print(res) # 如何获取生成器的内容呢?
    # 生成器的本质是迭代器,迭代器对象取值通过.__next__
    # 通过__next__ 取值时,才会执行函数体代码。
    print(res.__next__())

    输出结果:

    hello world!
    dawn
  • 生成器如何实现:通过yield关键字实现。

    • yield 只能在函数内部定义

    • 每一次yield 都会往生成器传一个值

    • 可以保存函数的暂停状态

    def yield_func():
    print("自定义生成器开始……")
    print("第一个yield:")
    yield "yield--1"
    print("第二个yield:")
    yield "yield--2"
    print("第三个yield:")
    yield "yield--3"
    print("最后一个yield:")
    yield "yield--4"
    print("查看,是否还有yield") res = yield_func()
    print(res.__next__())

    输出:

    自定义生成器开始……
    第一个yield:
    yield--1
  • yield 和 return

    • 相同点:返回值的个数无限制
    • 不同点:return 有且只能返回一个值;yield 可返回多个值
    # yield
    def yield_func():
    list1 = [2, 3, 4, 1]
    dict1 = {"name": "dawn", "age": 18, "hobby": "read"}
    tuple1 = (1, 'a', 2, 'b')
    set1 = {23, 34, 'e'} yield list1
    yield dict1
    yield tuple1, set1 # return
    def return_func():
    list1 = [2, 3, 4, 1]
    dict1 = {"name": "dawn", "age": 18, "hobby": "read"}
    tuple1 = (1, 'a', 2, 'b')
    set1 = {23, 34, 'e'} return list1,tuple1
    #此处代码执行不到,函数代码题遇到return 以后就结束了
    return dict1
  • 使用yield 自定义一个range

    """
    python2:range(1,5) ---→ [1,2,3,4]
    python3:range(1,5) ---→ range对象 ---→ 生成器 ---→ 迭代器 range(start,stop,step)
    """
    def my_range(start,end,step=1):
    while start < end:
    yield start
    start += move

python基础-生成器的更多相关文章

  1. 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  2. python基础——生成器表达式

    生成器表达式 1 生成器表达式定义 生成器表达式并不真正的创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目"产生"(yield)出来.生成器表达式使用 ...

  3. Python菜鸟之路:Python基础-生成器和迭代器、递归

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. 1. 迭代器优点 对于无法随机访问的数据结构(比如set)而言, ...

  4. python基础 生成器 迭代器

    列表生成式: a=[1,2,3] print a b=[i*2 for i in range(10)] #i循环10次,每一个i的值乘2就是列表中的值.列表生成式 print b >>[1 ...

  5. Python基础-生成器和迭代器

    生成器都是迭代器,迭代器不一定是生成器 def fansik(max): n, before, after = 0, 0, 1 while n < max: print(before) befo ...

  6. python基础——生成器与迭代器

    生成器 def func(): print("111") yield 1 print("222") yield 3 print("333") ...

  7. python基础—迭代器、生成器

    python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...

  8. 十三. Python基础(13)--生成器进阶

    十三. Python基础(13)--生成器进阶 1 ● send()方法 generator.send(value) Resumes the execution, and "sends&qu ...

  9. 十二. Python基础(12)--生成器

    十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...

随机推荐

  1. apt与apt-get命令的区别

    apt 和 apt-get的区别 Debian 作为 Ubuntu.Linux Mint 和 elementary OS 等 Linux 操作系统的母板,其具有强健的「包管理」系统,它的每个组件和应用 ...

  2. js 模糊搜索

    function fuzzysearch (needle, haystack) { var hlen = haystack.length; var nlen = needle.length; if ( ...

  3. mysql8忘记秘密-重置密码步骤

    mysql8修改密码的方式有些许不同 1.配置无密码登录 修改/etc/my.cnf文件,在mysqld模块下添加 skip-grant-tables 2.重启mysql 3.mysql -uroot ...

  4. Jenkins - 参数化构建

    1 - 设置 根据输入的参数来执行不同的构建过程. 参数TIME作为环境变量,可以被引用. 项目的首页会出现" Build with Parameters"功能链接,没有了&quo ...

  5. 「模拟赛20191019」A 简单DP

    题目描述 给一个\(n\times m\)的网格,每个格子上有一个小写字母. 对于所有从左上角\((1,1)\)到右下角\((n,m)\)只向下或向右走的路径构成的集合,判断是否存在两条走法不同的路径 ...

  6. php中的__get和__set方法

    1.__get() 作用:当实例化对象调用一个没有定义的属性时,会自动调用__get()方法 当实例化对象调用一个私有或者受保护的属性时,也会调用这个方法,方式类似 结果是:你访问的公开属性:name ...

  7. python模块知识四 包和logging日志

    11.包 包:文件夹下具有__init__.py文件就是一个包,包用来管理多个模块 包的结构如下: bake ├── __init__.py ├── api ├── __init__.py ├── p ...

  8. pandas中的axis参数(看其他人的博客中产生的疑问点,用自己的话解析出来)

    axis有两个值:axis=0或者axis=1 看到很多资料都不太理解,把我个人理解说一下: 下面这张图,在很多资料中都看到了,我只能说先死记住 axis=0,代表跨行(注意看这张图的axis=0的箭 ...

  9. Scala 函数入门之默认参数和带名参数

    Scala 默认参数 在Scala中,有时我们调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数. def sayHello(firstName: ...

  10. AX 2012 model应用

    说句实话,AX2012 model真心不好用,当你开发好,把Model到入到客户环境时, 要防止有冲突,假如出现冲突的话,还必须去删除另外一个Model里面冲突的代码,真心麻烦. 下面给一个ax 导入 ...