繁体   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