清理功能循环

时间:2016-01-07 12:22:20

标签: python recursion

我在python中循环一个函数,因为我创建了自己的常量侦听器。我的问题是如何确保我不会溢出/崩溃?从逻辑上讲,这告诉我我在后台留下了很多开放的功能。一旦我的应用程序的参数得到满足,我exit(0)就可以完全关闭。但我怎样才能确保这不会占用记忆?

这段代码工作得很好btw,但我只是想改进它,因为我感觉自己真的错了,我在自己内部调用函数而没有关闭之前的使用它而且感觉很脏。请提出建设性意见。

e.g。 (这是我现在的实际代码)

import serial
import sys
import time
def enterdata():
     ser = serial.Serial(sys.argv[1], sys.argv[2])
     ser.write("\r")
     time.sleep(0.5)
     while True:
         data = ser.read(ser.inWaiting())
         if (len(data) > 0):
             a = []
             for i in range(len(data)):
                 a.append(data[i])
                 if "Please press Enter to activate this console." in "".join(a):
                     print ("1")
                     exit(0)
                     break
      ser.close()
      enterdata()
ser = serial.Serial(sys.argv[1], sys.argv[2])
ser.write("\r\n")
enterdata()

远离帖子的新版本:

import serial
import sys
import time
def enterdata():
 ser = serial.Serial(sys.argv[1], sys.argv[2])
 ser.write("\r")
 time.sleep(0.5)
 while True:
  data = ser.read(ser.inWaiting())
  if (len(data) > 0):
   a = []
   for i in range(len(data)):
    a.append(data[i])
    if "Please press Enter to activate this console." in "".join(a):
     print ('1')
     return True
     exit(0)
   break
 ser.close()
ser = serial.Serial(sys.argv[1], sys.argv[2])
ser.write("\r\n")
state = False
while state is not True:
 state = enterdata()

1 个答案:

答案 0 :(得分:2)

您显示的此代码将给出“RuntimeError:超出最大递归深度”错误,因为Python设置了一次在一个函数中可以发生多少次递归的默认值。

任何你的都是无限的,即使你改变这个默认限制肯定会引起问题。

为什么不自己制作一个循环并随意调用该函数?

found = False
while not found:
    extracted_data = lookfordata()
    if extracted_data == "I want it to be equal to this":
        found = True

我看到你编辑了帖子。无论你想做什么,这种方法都不高效,不推荐也不漂亮。所有不使用它的好理由。

想象一下,您将处理一些比现在更大的数据,在超出限制之前,您将不知道递归停止条件是否会通过。在遇到更大的数据时,增加限制也没有用。我认为应该是任何程序员的目标是避免重复并提出可以处理任何类型意外输入的程序。

您再次更新了帖子。这种输入处理方式比原始递归要好得多。只是提一下,而不是;

for i in range(len(data)):
    a.append(data[i])

使用

for i in data:
    a.append(i)