1

我有一个多项式类:

class Polynomial:
    def __init__(self, *termpairs):
        self.termdict = dict(termpairs)

要将实例添加到此类,请输入以下内容:

P = Polynomial((3,2), (4,5), (9,8))

现在我正在尝试创建一个从文本文件中读取信息的函数,并从该文本文件中创建一个 Polynomial 类的实例。信息存储在文本文件中,如下所示:

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] 将不起作用。有没有办法可以通过每个索引,无论长度是多少?

4

3 回答 3

1

return 总是在调用时立即退出函数,并且只能返回一项。因此,如果您想要返回多个项目(在某种意义上),您必须将它们打包在一个列表中,然后返回。

代替 for 循环:

polys = []
for item in poly1:
    polys.append(Polynomial(item))
return polys

您当然必须将这个新结果作为一个列表来处理。

于 2011-11-28T05:29:40.087 回答
1

所有你需要的是

return Polynomial(*poly)

代替

return Polynomial(poly[0], poly[1], poly[2], poly[3], poly[4])

Docs here ...阅读以“”“如果语法*表达式出现在函数调用中”“”开头的段落

奖励:你的函数不使用它的参数,poly像疯了一样重用这个名字,而且不是惯用的,所以我重写了整件事:

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

高温高压

于 2011-11-28T06:59:14.983 回答
0

乍一看,这似乎是在创建第一个之后返回,所以你只能得到一个。尝试用then替换return语句:yield

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>
于 2011-11-28T05:19:45.903 回答