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结构的数字。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值