我的需求是在一个while(1)循环中一直读取摄像头的值,并返回里面的一个变量值,但同时保持循环一直执行,查了很多资料,发现大部分都没有用,摸索了2个小时,终于找到了方法。那就是用yield,goto只能在函数内跳转,所以goto解决不了该问题。
1. 先说一下goto吧,比较简单,就是通过跳转来实现,但仅在同一个函数内有效。
使用前先安装goto: pip install goto-statement
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from goto import with_goto
@with_goto
def range(start, stop):
i = start
result = []
label.begin
if i == stop:
goto.end
result.append(i)
i += 1
goto.begin
label.end
return result
if __name__=="__main__":
print(range(1, 5))
2. 生成器yield, 它可以吧fab函数内循环中的值传给test,并再次传给main,我用了两次,跑几下看看效果就懂了
def fab():
a= 1
while (1):
print("---",a)
yield a # 使用 yield
a+=2
if a>100:
return 0
def test():
for b in fab():
b+=3
yield b
def main():
for c in test():
print(c)
main()