继上一个问题之后: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
为什么不让我在功能之外打印列表?
答案 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您的Lats
和Longs
列表仅在函数执行期间存在。
答案 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
,我们应该使用Lats
和Longs
内的TwoPic
和Label
。例如,在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:从函数
返回它们