从python中的文本文件创建类实例

从python中的文本文件创建类实例,python,file,instances,Python,File,Instances,我有一个多项式类: class Polynomial: def __init__(self, *termpairs): self.termdict = dict(termpairs) 要将实例添加到此类,请输入以下内容: P = Polynomial((3,2), (4,5), (9,8)) 现在我试图创建一个函数,从一个文本文件中读取信息,并从该文本文件中创建一个多项式类的实例。信息存储在文本文件中,如下所示: 4 6 2 3 9 8 3 5 0 42 def r

我有一个多项式类:

class Polynomial:
    def __init__(self, *termpairs):
        self.termdict = dict(termpairs)
要将实例添加到此类,请输入以下内容:

P = Polynomial((3,2), (4,5), (9,8))
现在我试图创建一个函数,从一个文本文件中读取信息,并从该文本文件中创建一个多项式类的实例。信息存储在文本文件中,如下所示:

4 6
2 3
9 8
3 5
0 42
def read_file(polyfilename):
    polyfilename = open("polyfilename.txt", "r")
    poly1 = polyfilename.read()
    polyfilename.close()
    poly1 = [line.split() for line in poly1.split("\n")]
    poly1 = [[int(y) for y in x] for x in poly1]
    for item in poly1:
        return Polynomial(item)
到目前为止,函数如下所示:

4 6
2 3
9 8
3 5
0 42
def read_file(polyfilename):
    polyfilename = open("polyfilename.txt", "r")
    poly1 = polyfilename.read()
    polyfilename.close()
    poly1 = [line.split() for line in poly1.split("\n")]
    poly1 = [[int(y) for y in x] for x in poly1]
    for item in poly1:
        return Polynomial(item)
它只为文本文件中的第一对创建多项式实例,如何为文本文件中的所有对创建多项式实例

编辑: 我现在将此作为我的功能:

def read_file(polyfilename):
    polyfilename = open("polyfilename.txt", "r")
    poly = polyfilename.read()
    polyfilename.close()
    poly = [line.split() for line in poly.split("\n")]
    poly = [[int(y) for y in x] for x in poly]
    return Polynomial(poly[0], poly[1], poly[2], poly[3], poly[4])

它给出了我想要的答案,但是,这些文本文件的长度可能会有所不同,因此键入poly[1],poly[2]将无法工作。有没有一种方法可以让我浏览每个索引,无论其长度是多少?

快速浏览一下,第一个索引创建后,它似乎会返回,因此您只能返回一个索引。尝试用
yield
替换
return
语句,然后:

for p in read_file('somefile'):
  # p is a polynomial object, do what you will with it
如果有帮助的话,这是对收益率的一个很好的总结。同样,这只是从你写的东西快速看出来的

    def read_file(polyfilename):
        polyfilename = open(polyfilename, "r")
        poly1 = polyfilename.read()
        polyfilename.close()
        poly1 = [line.split() for line in poly1.split("\n")]
        poly1 = [[int(y) for y in x] for x in poly1]
        for item in poly1:
            yield Polynomial(item)

    for p in read_file('sample.txt'):
        print p
产生

<__main__.Polynomial instance at 0x39f3f0>
<__main__.Polynomial instance at 0x39f418>
<__main__.Polynomial instance at 0x39f3f0>
<__main__.Polynomial instance at 0x39f418>
<__main__.Polynomial instance at 0x39f3f0>

return始终在调用时立即退出该函数,并且只能返回一项。因此,如果您希望返回多个项目(从某种意义上说),则必须将它们打包到一个列表中,然后返回该列表

代替for循环:

polys = []
for item in poly1:
    polys.append(Polynomial(item))
return polys
当然,您必须将这个新结果作为一个列表来处理。

您所需要的就是

return Polynomial(*poly)
而不是

return Polynomial(poly[0], poly[1], poly[2], poly[3], poly[4])
文件。。。如果函数调用中出现语法*表达式,请阅读以“”开头的段落“”

好处:你的函数没有使用它的arg,疯狂地重复使用名称
poly
,而且不惯用,所以我重写了整个内容:

def read_file(polyfilename):
    with open(polyfilename) as f:
        return Polynomial(*[[int(x) for x in line.split()] for line in f])

HTH

这很有帮助,我将尝试找出如何处理列表。哈哈,我甚至没有想到使用*poly,同样,感谢您提供的使函数看起来更整洁的提示。