[英]Creating instances efficiently in Python
因此,我有一個程序,其中需要使用從外部文檔導入的變量創建一個類的4個實例。 我有一個解決方案,已將其放在下面,但是我想知道是否有一種更簡單/更有效的方法,也許是使用for循環。
partsLine = partsDoc.readline()
partsList = partsLine.split(' ')
part1 = Parts(partsList[0], partsList[1], partsList[2],)
partsLine = partsDoc.readline()
partsList = partsLine.split(' ')
part2 = Parts(partsList[0], partsList[1], partsList[2],)
partsLine = partsDoc.readline()
partsList = partsLine.split(' ')
part3 = Parts(partsList[0], partsList[1], partsList[2],)
partsLine = partsDoc.readline()
partsList = partsLine.split(' ')
part4 = Parts(partsList[0], partsList[1], partsList[2],)
經驗法則:如果您有多個具有相同名稱的變量,但末尾有一個數字,請用列表替換所有變量。
my_parts = []
for i in range(4):
partsLine = partsDoc.readline()
partsList = partsLine.split(' ')
my_parts.append(Parts(partsList[0], partsList[1], partsList[2],))
您仍然可以使用索引來引用各個部分,例如my_parts[2]
,因此您並不會因此失去任何表現力。
生成零件列表 ,不要使用單獨的partN
變量名稱。 使用itertools.islice()
將文件的讀取行限制為前四行:
from itertools import islice
parts = []
for line in islice(partsDoc, 4):
part = Parts(*line.split(None, 3)[:3]) # apply the first 3 elements as arguments
parts.append(part)
可以使用列表理解來進一步減少:
parts = [Parts(*line.split(None, 3)[:3]) for line in islice(partsDoc, 4)]
從這里開始,您可以使用索引解決這四個部分:
parts[2]
給您文件中第三行的結果。
請注意,我用str.split(None, 3)
替換了str.split(' ')
str.split(None, 3)
; 這將更改拆分行為,以在開頭和結尾去除多余的空格,並將拆分次數限制為僅您需要的內容,而不再需要。
使用函數創建新的Parts
實例:
def make_part(parts_doc):
parts_line = parts_doc.readline()
parts_list = parts_line.split(' ')
return Parts(parts_list[0], parts_list[1], parts_list[2])
您可以在列表理解中使用它:
parts = [make_part(parts_doc) for _ in range(4)]
通過索引檢索實例:
parts[0]
def make_part_from_line(parts_line):
parts_list = parts_line.split(' ')
return Parts(parts_list[0], parts_list[1], parts_list[2])
文件對象是一個迭代器,它使用next
返回下一行:
parts = [make_part_from_line(next(parts_doc)) for _ in range(4)]
def make_part_from_line(parts_line):
return Parts(*parts_line.split(' ')[:3])
*
-syntax將列表解壓縮為三個函數參數。
該功能只有一行。 直接使用:
parts = [Parts(*next(parts_doc).split(' ')[:3]) for _ in range(4)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.