• Python generator高级方法应用解析


    一、Python generator高级方法介绍

    Python yield 是generator实现各种功能的核心。除了yield之外,generator对象还可以使用以下方法:

    .send():一般用于发送消息

    .throw():可以抛出异常

    .close():关闭generator对象

    通过以上方法可以构建出一个事件循环消息系统。基于这样一种循环结构,你可以在程序中添加一个数字,基于此来启动下一个数字的搜索。在操作中可以使用throw()方法来处理异常,并且在满足给定条件的情况下调用方法close()来关闭这个generator对象。

    首先来看下这段代码:

    我们运行一下这条语句看下效果:

    print(is_palindrome(10100))

    根据上面代码逻辑应该返回False:

    再运行这条语句:

    print(is_palindrome(10101))

    下面使用yield来改造上面这段代码,改造后的代码并不返回True或者False:

    Yield本质上来说是一个表达式而不是一条语句(当然你可以把它作为语句使用),这里通过yield返回值给调用者。当调用者再次调用这个方法时,关于变量i的赋值会有两种情况,一种情况是调用者调用方法时没有传入新的值,那么i会被赋予之前通过yield产生的值;而如果调用者传入了新的值,那么变量i会被赋予新的值。我们可以通过这样的方式来操作yield产生的值。更重要的是,调用者可以使用方法send()来发送一个值给generator对象,当在上面这段代码中执行yield之后的下一条指令时,就会把发送的值赋予变量i。

    你可以检查是否i不为None,这是因为可以在generator对象上调用next()方法(使用for循环时就会发生这种情况)。如果i有值,那么就使用新的值来更新它,但是与i是否有值无关,上面的代码都会使num的值递增并且重新启动循环来查找符合palindrome结构的数字。

    二、应用示例解析

    下面写一个调用方法来看下上面提到的代码是如何工作的。

    在这段代码中,首先创建一个generator对象,然后迭代循环这个对象,通过调用send()方法返回值给generator对象。这段代码只会在一旦找到一个符合palindrome结构(譬如数字10101)的数字时才会使用yield产生一个值,然后使用len()方法取得这个值的位数,通过方法send()发送10 ** digits给generator对象,并给变量i赋值为10 ** digit,这时方法infinite_palindrome()就会更新num并启动新的循环来检查符合palindrome结构的数字。

    下面是执行这段代码之后输出的效果:

  • 相关阅读:
    3.1 Go语言中的函数与方法
    .NETCore项目在Windows下构建Docker镜像并本地导出分发到CentOS系统下
    面试题整理
    Python NumPy的基本使用
    day-62 代码随想录算法训练营(19)图论 part 01
    C# StartsWith 字符串的实例方法
    并发编程知识总结
    【LeetCode】312.戳气球
    哈希(哈希散列数据结构)---底层原理
    华为OD机试 - 寻找最大价值的矿堆 - 矩阵(Java 2023 B卷 200分)
  • 原文地址:https://blog.csdn.net/m0_49380401/article/details/126442607