Python - 使用列表外部函数

时间:2014-01-28 11:36:31

标签: python list function tuples

继上一个问题之后:Python - different variable with each function run

我现在可以多次运行该函数并附加到一个很棒的列表。现在的问题是访问函数外的列表。

def TwoPic():
    run = 0
    Lats = []
    Longs = []
    while run < 2:
        run = run + 1
        print ("Start func TwoPic")
        oneMorePic()
        Lats.append(finalLatSecondPhoto)
        Longs.append(finalLongSecondPhoto)

        print '\n\nYour coordinates: ' + rippedLatitudeTwo + ',-' + rippedLongitudeTwo
        print "Below are the 2 new lats and longs in a list"
        print Lats
        print Longs
        root.quit()
    return Lats, Longs

root = Tk() 

label = Label(root, text="Choose Iterations", font=('Calibri', 12))
button1 = Button(root, text = "0 Pics", command = Quit)
button2 = Button(root, text = "1 Pic", command = OnePic)
button3 = Button(root, text = "2 Pics", command = TwoPic)

label.pack()
button1.pack()
button2.pack()
button3.pack()
root.mainloop() 

print "List: "

print Lats, Longs # Should print my list....I'm now outside of the function

错误:

Your coordinates: 43 48.54,-1 24.58
Below are the 2 new lats and longs in a list
[43.809, 43.809]
[1.409, 1.409]
List:
Traceback (most recent call last):
  File "simonsScript.py", line 447, in <module>
    print Lats, Longs
NameError: name 'Lats' is not defined

为什么不让我在功能之外打印列表?

5 个答案:

答案 0 :(得分:1)

尝试打印时,Lats变量不在范围内。 尝试在函数之外定义它(注意:拥有“全局”变量很少是个好主意;我假设您知道自己在做什么,而且没有其他合理的选择。)< / p>

Lats = []

def TwoPic():
    run = 0
    [...]

print Lats

此外,使用大写字母定义变量并不是一种好习惯。当然这取决于您的命名约定,但如果您习惯于常规实践,将来可能更容易阅读其他人的代码。

这意味着:

lats = []
def two_pic():
    run = 0
    [...]

print lats,long..

如果您想了解更多关于python的良好编码实践(不一定与命名变量相关),请搜索“pep8”或查看此link

答案 1 :(得分:1)

  

为什么不让我在功能之外打印列表?

因为它是一个仅存在于函数中的本地名称(并且FIY您的LatsLongs列表仅在函数执行期间存在。

答案 2 :(得分:0)

在TwoPic()范围内定义的Lats和Longs它们不是全局的,您试图访问未定义的变量。

将代码更改为首先通过您创建的函数定义它们,然后打印它们的值。

Lats, Longs = TwoPic() 
print "Lists:", Lats, Longs

答案 3 :(得分:0)

你所做的是荒谬的......

你创建一个按钮,例如当你点击它时,你进入TwoPic()

button3 = Button(root, text = "2 Pics", command = TwoPic)

虽然您希望在<{1}}和Lats 之前获取数据,但会定义数据。

一旦您定义了Longs,我们应该使用LatsLongs内的TwoPicLabel。例如,在print语句中,或者您已经在class HandleLongLats: def __init__(self): self.longs = [] self.lats = [] def twoPic(self): run = 0 while run < 2: run = run + 1 print ("Start func TwoPic") oneMorePic() self.lats.append(finalLatSecondPhoto) self.longs.append(finalLongSecondPhoto) print '\n\nYour coordinates: ' + rippedLatitudeTwo + ',-' + rippedLongitudeTwo print "Below are the 2 new lats and longs in a list" print self.lats print self.longs root.quit() self.showList() def showUI(self): root = Tk() label = Label(root, text="Choose Iterations", font=('Calibri', 12)) button1 = Button(root, text = "0 Pics", command = Quit) button2 = Button(root, text = "1 Pic", command = onePic) button3 = Button(root, text = "2 Pics", command = self.twoPic) label.pack() button1.pack() button2.pack() button3.pack() root.mainloop() def showList(self): print "List: " print self.lats, self.longs # Should print my list....I'm now outside of the function 语句中显示它们。

另一种解决方案:

lats

这里的想法是创建一个类的longs和{{1}}成员,这样你就可以在另一个函数中使用它们。

答案 4 :(得分:0)

您尝试在尝试打印它们的地方找到超出范围的变量。在您的代码中,您只能访问函数内的那些变量。您的问题有3个解决方案。

1:让他们像他们一样:

def TwoPic():
    run = 0
    global Lats = []
    global Longs = []
    [...]

2:定义函数外的变量

Lats = []
Longs = []
def TwoPic():
    run = 0 
    [...]

3:从函数

返回它们