簡體   English   中英

在Python中高效創建實例

[英]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]

增量改進I-使函數成一行

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

增量改進II-縮短功能

def make_part_from_line(parts_line):
    return Parts(*parts_line.split(' ')[:3])

* -syntax將列表解壓縮為三個函數參數。

增量改進III-使它成為單線

該功能只有一行。 直接使用:

parts = [Parts(*next(parts_doc).split(' ')[:3]) for _ in range(4)]

暫無
暫無

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

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