arduino编程语言和python,python和arduino串口通信
英语单词yield指的是生产。刚接触Python的时候,很迷茫,不知道yield的用法。
不过我大致知道yield可以用来填充函数返回的数据。例如,下面的例子:
efaddlist(列表) :
因为我列出了:
产量i 1
取出列表中的项目,然后按i 1。然后,打电话把每个项目都拿出来。
列表=[ 1,2,3,4 ]
forxinaddlist(列表) :
打印(x)是
这确实是yield APP的一个例子。
包含产量的函数
假设你看到一个包含yield的函数。这意味着这个函数已经是一个生成器,它的执行与其他常用函数有很大的不同。例如,下面的简单函数:
def h)):
“打印为勇敢”
产量5
h()).
h))之后,可以看到print语句还没有执行。这就是屈服。那么,如何执行print语句呢?这是下一个要讨论的问题。通过后面的讨论和学习,我们会明白yield的工作原理。
2.屈服是一种表达
在Python2.5之前,yield是一个语句,但在当前的2.5中,yield是一个表达式,如下所示:
m=产量5
公式yield 5的返回值代入m,认为m=5是错误的。那么,如何得到(收益率5)的返回值呢?需要稍后描述的send(msg)方法。
接下来))通过句子看原理
那么,我们来搞清楚收益率的结构。上面我们知道我们的H(),因为有yield表达式,所以调用时不会执行。因此,接下来))语句执行。Next))语句在下一个yield表达式之前继续执行生成器。例如:
def h)):
打印汶川
产量5
打印文件!
c=h()).
c.next()).
调用c.next () (h))后,会输出结果,直到遇到yield 5。
汶川
当我们再次调用c.next())时,它将继续执行,直到找到下一个yield表达式。因为它背后没有yield,所以会抛出一个异常:
汶川
好吧!
跟踪(mostrecentcalllast):
文件/home/evergreen/codes/yi dld.py ,第11行,在
c.next()).
停止解释
4 .发送(消息)和下一个)。
接下来))在了解了如何执行包含yield的函数之后,我们再来看另一个非常重要的函数,send(msg)。实际上,next(和send))在某种意义上起着类似的作用。不同的是,send))可以传递yield表达式的值,而next))不能传递特定的值,只能传递None。所以,我们应该
C.next(和c.send)功能相同。
让我们看看这个例子。
def h)):
印刷体文传:
m=产量5 #战斗!
打印m
d=产量12
印上“我们在一起!”
c=h()).
C.next(#是c.send)(无)
c . send(‘战斗!’()#(yield 5)表达式包含“战斗!”被授权。
结果如下。
汶川加油!
在第一次调用中使用next(语句或发送)None。不能使用send发送非none值。发送None以外的值将导致错误,因为没有yield语句。
5.5.send(msg)和next)的返回值
Send(msg)和next)都有返回值。返回值比较特殊,返回下面yield表达式的参数:比如是yield 5,就返回5。目前为止,你知道些什么吗?在本文的第一个例子中,在list中用for i遍历生成器,但实际上是调用list的返回值。下一个()(列表。接下来)每次都是收益率的参数。继续上面的例子:
def h)):
印刷体文传:
m=产量5 #战斗!
打印m
d=产量12
印上“我们在一起!”
c=h()).
M=c.next(#m得到了yield 5的参数值5。
d=c.send(战斗!(yield 12的参数值是12。
打印‘我们永远不会忘记这个日期’,m,”,d
输出结果:
汶川加油!
我们永远不会忘记这个日子。12
6.抛出(并关闭))中断发生器
中断发生器是一种非常灵活的技术。throw可以通过抛出生成器退出异常来退出生成器。Close))方法有相同的功能,但实际上throw(generatorexit)是内部调用的。让我们看看:
defclose(自身) :
尝试:
self.throw(GeneratorExit)
除了(generatorexit):
及格
否则:
实时错误(generatorignoredgeneratorexit)。
#未捕捉到其他异常
因此,调用关闭(调用方法后为下一个) )或发送)消息)时,会抛出异常。
跟踪后退(mostrecentcalllast):
文件/home/evergreen/codes/yi dld.py ,第14行,在
d=c.send(战斗!(四)取得了产量12的参数值12
停止解释
7.演示
defgen(:
打印( 111 ) ) )。
m=产量ret 1
我是打印(m)
print(222))))))。
n=产量ret 2
打印(名词)是
g=gen())
打印(下一个)
打印-)
打印(g。发送( 111结束 ) )
输出结果:
111
回复一
-
11超重
222
回复2
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。