我很困惑:
class lin_reg:
def __init__(self):
''' Executes the program '''
Indep_Array, Dep_Array = self.Prob_Def()
Total_Array = Indep_Array.append(Dep_Array)
print Indep_Array, Dep_Array, Total_Array
NumArray = len(Total_Array)
def Prob_Def(self):
Analy_Type = raw_input('Type of Regression(linear-n,nonlinear-nl): ')
Num_IndepVar = eval(raw_input('Number of Independent Variables: '))
Indep_Array = []
for IndepVar in range(Num_IndepVar):
ArrayInput = eval(raw_input('Enter the array: '))
Indep_Array.append(ArrayInput)
Dep_Array = eval(raw_input('Enter the dependent array: '))
return Indep_Array, Dep_Array
当我运行此代码时,我得到如下输出:
obs=lin_reg.lin_reg()
Type of Regression(linear-n,nonlinear-nl): nl
Number of Independent Variables: 3
Enter the array: [1,2,3]
Enter the array: [2,3,4]
Enter the array: [3,4,5]
Enter the dependent array: [5,6,7]
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [5, 6, 7]] [5, 6, 7] None
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
obs=lin_reg.lin_reg()
File "C:\Python27\DataAnalysis\lin_reg.py", line 13, in __init__
NumArray=len(Total_Array)
TypeError: object of type 'NoneType' has no len()
依赖数组Dep_Array
如何自动附加到Indep_Array
,为什么Total_Array
会返回None
?
我希望看到上面输入的输出如下: [[1,2,3],[2,3,4],[3,4,5]] [5,6,7] [[1,2,3],[2,3,4],[ 3,4,5],[5,6,7]]
答案 0 :(得分:7)
.append
修改原始列表并返回None
。你想要+
。
我冒昧地将代码重写为Python的外观。
class lin_reg(object):
def __init__(self):
self.indep, self.dep = self.initialise_from_user()
self.total = self.indep + self.dep
print self.indep, self.dep, self.total
self.n = len(self.total)
def initialise_from_user(self):
analysis_type = raw_input('Type of Regression(linear-n,nonlinear-nl): ')
n = int(raw_input('Number of Independent Variables: '))
indep = [np.matrix(raw_input('Enter the array: ')) for _ in range(self.n)]
dep = np.matrix(raw_input('Enter the dependent array: '))
return indep, dep
答案 1 :(得分:2)
Dep_Array
自动附加到Indep_Array
的原因是因为Indep_Array.append(Dep_Array)
修改了Indep_Array
。
函数append
返回None
而不是列表。这样做是为了防止人们链接修改参数的函数,例如a.append(b).remove(c).doSomething(d)
。通过防止这种情况,对于不熟悉这些方法的人来说,代码仍然清晰易懂。
答案 2 :(得分:1)
这是因为list.append()
没有返回任何内容,它会更改列表。因此,
Total_Array=Indep_Array.append(Dep_Array)
使Total_Array
等于None
。
此外,命名约定是针对大写变量名称的。