簡體   English   中英

清理功能循環

[英]cleaning up function looping

創建自己的常量偵聽器時,我正在python中循環一個函數。 我的問題是如何確保我不會溢出/崩潰? 從邏輯上講,這告訴我我在后台留下了許多開放函數。 滿足我的應用程序的參數后,我exit(0)進行徹底關閉。 但是如何確保這不會消耗內存呢?

這段代碼可以很好地工作,但是我只是試圖對其進行改進,因為在我自己內部調用該函數而不關閉其先前使用的感覺對我來說真的很不對勁,而且感覺很臟。 請提出建設性意見。

例如(這是我的實際代碼)

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()

您顯示的這段代碼將給出“ 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM