Python如何在while循环中返回值

4

在while循环中使用return将会停止循环,如何解决?

ser = serial.Serial(
    port='COM5',
    baudrate = 9600,
    timeout=1)
while 1:
    x=str(ser.readline())
    x = re.findall("\d+\.\d+", x)
    x = float(x[0])
    return(x) #loop stopped
    print(x)

你能帮我吗?


1
取决于你想让循环执行什么操作。你是否尝试过 yield - tobias_k
1
也许你需要一个生成器 - Phylogenesis
2
那么输出到文件怎么样? - Robin Koch
1
为什么要使用return呢?在while循环中更新显示的值不是更好吗? - developius
1
请用以下函数将数据发送到LCD屏幕,而非使用"return"关键字。 - Sławek Kabik
显示剩余4条评论
3个回答

1
如果您想持续地将值传递给另一段代码,可以使用 yield

您可以修改您的代码如下:

def func():
    while 1:
        x=str(ser.readline())
        x = re.findall("\d+\.\d+", x)
        x = float(x[0])
        yield x

然后调用函数。请注意,f将是一个生成器,因此您需要像下面一样循环遍历它。

f = func()
for i in f:
    print(i) # or use i for any purpose

参考资料:这里

这个可行了...!! 我使用了cv2.Vid的while循环... <3<3 - Bharath Kumar

1

只需取出你的

x=str(ser.readline())
x = re.findall("\d+\.\d+", x)
x = float(x[0])
return(x) #loop stopped

将其放入一个函数中,例如:
def foo(ser):
    x=str(ser.readline())
    x = re.findall("\d+\.\d+", x)
    x = float(x[0])
    return(x)

并将您的 while 循环简化为以下内容

while 1:
    print(foo(ser))

然而,@developius提供了一个更好的解决方案,大致如下:

while 1:
    x=str(ser.readline())
    x = re.findall("\d+\.\d+", x)
    x = float(x[0])
    print(x)

1
谢谢你的建议Dillanm,我会尝试的。我是一个编程的初学者。 - Juizy J.
@JuizyJ。我们都要从某个地方开始!Python文档本身就很好,我在学习Python时也发现CodecademyTutorialsPoint非常不错,特别是Codecademy,因为它是交互式的,并且可以立即获得反馈!(而且它们都是免费的!) - Dillanm

-2

你可以试试这个

while 1:
    x=str(ser.readline())
    x = re.findall("\d+\.\d+", x)
    x = float(x[0])
return x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接