【发布时间】:2017-08-20 20:36:41
【问题描述】:
我对编程、Python 和一般的面向对象编程很陌生。对于学校作业,我必须编写一个定义“多项式”类的代码,并以此找到多项式的根。由于代码没有按预期运行,我开始分析它并意识到一个全局变量,即表示多项式的系数列表,它是多项式类的“输入”,正在被修改。问题是我似乎无法弄清楚是什么(部分代码)导致了这种操作。以下是我使用的代码(相关部分):
#set input list
il=[1,1,-1]
#define B!/(O-1)!, note that O is an "oh":
def pr(O,B):
p=1
for i in range(O,B+1):
p*=i
return p
#polynomial
class pol:
#init:
def __init__(self,L=[0]):
self.l=L
self.d=len(L)
self.n=self.d-1
#evaluate:
def ev(self,X=0):
if X==0:
return self.l[0]
else:
s=self.l[0]
for i in range(1,self.d):
s+=self.l[i]*X**i
return s
#N-th derivative:
def der(self,N=1):
if self.n < N:
return pol([0])
else:
lwork=self.l
for i in range(N,self.d):
lwork[i]*=pr(i-N+1,i)
return pol(lwork[N:])
#define specific polynomial and take derivative:
#---here I have put some extra prints to make clear what the problem is---
f=pol(il)
print(il)
fd=f.der()
print(il)
fd2=f.der(2)
print(il)
现在这应该评估为(至少在我的机器上是这样)
[1,1,-1]
[1,1,-2]
[1,1,-4]
虽然我希望它只是第一个列表三次,因为在方法“der”的定义中,我不操纵输入列表,或者在我看来是这样。
有人可以解释发生了什么吗?我错过了一个(简单的)细节,还是我在这里滥用了(某些方面的)类?
为了执行我的代码,我使用了在 Python 3.5.2 上运行的在线编译器 (repl.it)。
【问题讨论】:
-
您的
pol课程不会复制您传递给它的列表。它与il全局变量所引用的列表相同。
标签: python python-3.x class object