Python中pass,python pass的用法
在看别人的python源代码时偶然发现了yield这个关键词,经过各种搜索终于明白了。总结如下:
在普通的for…In…循环中,in后面有一个数组。这个数组是一个可重复的对象。还有链表、字符串、文件。它可以是我的清单。
=[ 1,2,3],mylist=[x*x for x in range(3()]就可以。它的缺点是所有的数据都存在内存中,如果数据量大,会非常消耗内存。
生成器可以重复,但只能读取一次。因为只有在使用的时候才会产生。例如mygenerator=(x*xforxin
请注意范围(3)(此处))。不是数组。上面的例子是[]。
我理解生成器可以重复的关键是下一个方法。它的工作方式是反复调用next))方法,直到一个异常被捕获。你可以在上面的我的生成器中测试它。
有yield的函数不再是普通的函数,而是生成器,可以用来迭代。结构是一样的。
收益就像回报。
的关键字。当遇到yield时,将返回yield后的值。关键是在下一次迭代中,会执行上一次迭代中遇到的yield之后的代码。
很好理解:yield指的是返回值,记住返回的位置。下一次迭代从这个位置开始。
带yield的函数不仅可以用于循环,也可以用于函数参数,只要函数参数允许参数迭代。例如,array.extend函数的原型是array.extend(iterable)。
send(msg)和next)的区别在于,send可以向yield表达式传递参数,传递的参数是yield表达式的值,yield参数是返回给调用者的值。3354换句话说,send可以强制修改最后一个yield表达式的值。例如,函数有一个产量赋值
=yield 5,初始迭代在这里返回5,A还没有赋值。在第二次迭代中。使用send(10)。然后将yield 5表达式的值强制修改为10,如果原来是5,那么a=10。
send(msg)和next)的返回值是当前迭代遇到yield后表达式的值。其实这是当前迭代的yield之后的参数。
在第一次调用中,next(或send) None)必须首先。否则,将会报告一个错误。之后,send变为None,因为没有以前的yield(根据第8条,此时为)。你可以认为next (is send) none)是等价的。
Yield只是一个生成器。生成器是一个函数,用于记住它最后一次返回时在函数体中的位置。对生成器函数的第二次或第n次调用将跳转到函数的中间,最后调用的所有局部变量将保持不变。
生成器是一个函数,
该函数的所有参数都将被保留。
第二次调用这个函数时,
上次保留了的参数。
生成器还“记住”流控制的结构。
生成器不仅“记住”数据的状态。生成器还“记住”流控制结构中的位置(在基于指令的编程中,这种结构不仅仅是数据值)。连续性是常见的,因为它允许您在执行帧之间自由跳转,而不是像生成器一样直接返回调用上下文。
产量发生器的工作原理
当专心杯向发电机索要数量时,发电机就会一直运转,直到产量报表出现。生成器传递yield参数。然后,生成器停止执行。当专心杯向他要下一个量时,他会从上一个状态开始执行,直到yield语句出现,传递参数,然后停止。直到重复功能结束。
示例:Python数组,复合生成器
生成所有排列定义(项,n=无):
ifnisNone:
n=贷款(项目)
Foriinrange(Len)项目):
v=项目[i:i 1]
ifn==1:
yieldv
否则:
rest=items [ : I ] items [ I 1: ]
forpinperm(其余,n-1):
yieldv p
生成复合定义组合(项目,n=无):
ifnisNone:
n=贷款(项目)
Foriinrange(Len)项目):
v=项目[i:i 1]
ifn==1:
yieldv
否则:
rest=items[i 1:]
forcincomb(其余,n-1):
yieldv c
a=perm(ABC)).
forbina:
打印b
黑色
打印- * 20
forbina:
打印b
结果是102 PV OPF 006 ~ ~/测试。/generator.py。
哥伦比亚广播系统(CBS)
-
自动对比度平衡
二进制-模拟转换(binary analogue convert的缩写)
贝卡
驾驶室
中国篮球协会
可以看出,第一个周期中断后,发电机不会继续运行,而是在第一个周期后执行第二个周期。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。