列表定义为函数中的全局但仍然会得到列表未定义的错误-python

时间:2015-10-21 22:21:46

标签: python list global

我在介绍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

3 个答案:

答案 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

accumulate

答案 2 :(得分:0)

错误消息显示问题出在pairsglobal中的list_comprehension声明对pairs没有影响,它需要自己的全局声明。

def isolate(X,Y):
    global pairs
    for (x,y) in pairs:
        X.append(x)
        Y.append(y)

    return X, Y