我在介绍Python
课程,这是我第一次接触编程。任何帮助非常感谢。我正在创建一段代码,用于确定文本文件中给定输入集的线性回归函数。我已经定义了包含有序对(x,y)
列表的变量作为全局对。但是,我不断收到未定义对的错误。我不能调整我的代码的任何其他部分,因为这个列表是空的,导致我从这个列表派生的其他列表也是空的。我真的坚持这个,我在这个网站和其他人寻找答案,但我还没有找到解决方案。
这是我的一些代码:
#read values into tuple to seperate the spaces from X and Y values from the text file
#convert the tuple to a list containing (x,y) paris
#the values are stored if we call the funciton
#but the list of pairs doesn't seem to be global, it is empty when i just print(pairs)
def list_comprehension(in2):
infile = open("in2",'r')
global coordinates
coordinates = (line.split() for line in infile)
infile.close()
global pairs
pairs = [(float(x),float(y)) for x,y in coordinates]
pairs.append(coordinates)
return pairs
#isolate x and y variables into seperate lists
#same problem, the funciton operates fine
#but the lists have nothing in them because pairs has nothing in it
X=[]
Y=[]
def isolate(X,Y):
for (x,y) in pairs:
X.append(x)
Y.append(y)
return X, Y
错误是这样的:
File "C:/Python34/python/Program 5/p5 draft function and values.py", line 47, in isolate
for (x,y) in pairs:
NameError: name 'pairs' is not defined
答案 0 :(得分:1)
我的猜测是在isolate
之前的某个时间点调用list_comprehension
,这意味着尚未定义全局名称pairs
。
>>> def init():
... global z
... z = 2
...
>>> z
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'z' is not defined
>>> init()
>>> z
2
预防性说明
建议不要使用global
关键字,因为它很难跟踪所有全局变量的位置。相反,我建议在主要功能中声明pairs
,然后设置pairs = list_comprehension(...)
并将其传递到isolate(X,Y,pairs)
。请参阅评论中@ r-nar提到的Use of "global" keyword in Python。
答案 1 :(得分:0)
当您在函数中声明变量的全局范围时,将使用global
关键字。您希望修改全局变量时需要它。检查以确保您已在函数外部声明pairs
。
答案 2 :(得分:0)
错误消息显示问题出在pairs
。 global
中的list_comprehension
声明对pairs
没有影响,它需要自己的全局声明。
def isolate(X,Y):
global pairs
for (x,y) in pairs:
X.append(x)
Y.append(y)
return X, Y