2017-01-13 2 views
0

Когда положить return in while loop, цикл остановится. Как его исправить?Python Как вернуть значение во время цикла

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'] (http://stackoverflow.com/q/231767/1639625)? –

+1

Возможно, вам нужен генератор (https://wiki.python.org/moin/Generators)? – Phylogenesis

+0

Спасибо за ваш комментарий. Я еще не пробовал уступить, но мой проект должен собрать 24 часа, можно ли собирать огромные данные с урожаем? и я хочу отправить данные в реальном времени –

ответ

0

Просто возьмите ваш

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 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, я попробую, я новичок в кодировке –

+0

@JuizyJ. мы все должны что-то начать! Документы Python довольно хороши сами по себе, я также нашел [Codecademy] (https://www.codecademy.com/learn/python) и [TutorialsPoint] (https://www.tutorialspoint.com/python/) для быть очень хорошим, когда я изучал Python, особенно Codecademy, так как он интерактивен и дает немедленную обратную связь! (и они оба тоже свободны!) – Dillanm

0

и можно попробовать это один

while 1: 
    x=str(ser.readline()) 
    x = re.findall("\d+\.\d+", x) 
    x = float(x[0]) 
return x 
Смежные вопросы