name 'times' 在全局声明之前被使用 - 但确实已声明
我正在编写一个小程序,用来记录和展示我的魔方解法时间,并且按顺序排列。但是,Python(3)总是提醒我在全局声明之前使用了变量“times”。奇怪的是,我确实在一开始就声明了它,写成了 times = []
(是的,它是一个列表),然后在函数里又写了一次 times = [some, weird, list]
,并用 global times
来声明它是全局变量。以下是我的代码,你可以随意分析:
import time
times = []
def timeit():
input("Press ENTER to start: ")
start_time = time.time()
input("Press ENTER to stop: ")
end_time = time.time()
the_time = round(end_time - start_time, 2)
print(str(the_time))
times.append(the_time)
global times
main()
def main():
print ("Do you want to...")
print ("1. Time your solving")
print ("2. See your solvings")
dothis = input(":: ")
if dothis == "1":
timeit()
elif dothis == "2":
sorte_times = times.sort()
sorted_times = sorte_times.reverse()
for curr_time in sorted_times:
print("%d - %f" % ((sorted_times.index(curr_time)+1), curr_time))
else:
print ("WTF? Please enter a valid number...")
main()
main()
任何帮助都非常感谢,因为我在Python的世界里还是个新手。
8 个回答
2
来自 Python文档
在一个全局声明中列出的名字,不能在同一个代码块中出现在这个全局声明之前。
35
来自Python文档的内容:
在全局声明中列出的名称,不能在那个全局声明之前的同一代码块中使用。
https://docs.python.org/reference/simple_stmts.html#global
所以,把 global times
移到函数的最上面应该能解决这个问题。
不过,你应该尽量避免在这种情况下使用 global
。可以考虑使用一个类。
49
全局声明就是你告诉程序,times
这个变量是全局的。
def timeit():
global times # <- global declaration
# ...
如果一个变量被声明为global
,那么在声明之前是不能使用这个变量的。
在这种情况下,我觉得你根本不需要这个声明,因为你并不是在给times
赋值,只是在修改它。