我有一个多项式类:
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)
它只为文本文件中的第一对创建一个Polynomial实例,如何为文本文件中的所有配对创建一个Polynomial实例?
编辑: 我现在将此作为我的功能:
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]将不起作用。无论长度是多少,我都可以通过每个索引吗?
答案 0 :(得分:1)
return总是在调用后立即退出函数,并且只能返回一个项目。因此,如果您想要返回多个项目(在某种意义上),您必须将它们打包在列表中,然后返回。
取代for循环:
polys = []
for item in poly1:
polys.append(Polynomial(item))
return polys
你当然必须以清单的形式处理这个新结果。
答案 1 :(得分:1)
你需要的只是
return Polynomial(*poly)
而不是
return Polynomial(poly[0], poly[1], poly[2], poly[3], poly[4])
文档here ...读取以“”开头的段落“如果语法*表达式出现在函数调用中”“”
Bonus:你的函数不使用它的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
答案 2 :(得分:0)
快速浏览一下,看起来这是在创建第一个之后返回的,所以你只能得到一个。尝试将return
语句替换为yield
,然后:
for p in read_file('somefile'):
# p is a polynomial object, do what you will with it
如果有帮助the first response here是对收益率的一个很好的总结。再一次,这只是通过快速查看你所写的内容。
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>