el nombre ‘veces’ se usa antes de la statement global – ¡Pero se declara!

Estoy progtwigndo un pequeño progtwig para progtwigr y mostrar, de forma ordenada, mis soluciones de cubos de Rubik. Pero Python (3) sigue molestándome por el uso de los tiempos antes de la statement global. Pero lo que es extraño es que ESTÁ declarado, justo al principio, como times = [] (sí, es una lista) y luego otra vez, sobre la función (donde se queja) como times = [some, weird, list] y “globalizándolo” con global times . Aquí está mi código, así que puedes analizarlo como quieras:

 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() 

Cualquier ayuda sería muy apreciada ya que soy nuevo en el mundo de Python 🙂

La statement global es cuando usted declara que los times son global

 def timeit(): global times # <- global declaration # ... 

Si una variable se declara global , no se puede usar antes de la statement.

En este caso, no creo que necesites la statement en absoluto, porque no estás asignando los times , solo modificándolos.

De la documentación de Python:

 Names listed in a global statement must not be used in the same code block textually preceding that global statement. 

http://docs.python.org/reference/simple_stmts.html#global

Por lo tanto, mover global times a la parte superior de la función debería estar bien.

Pero, debes tratar de no usar globales en esta situación. Considera usar una clase.

De los documentos de Python

Los nombres enumerados en una statement global no deben usarse en el mismo bloque de código textual que precede a esa statement global.

Este progtwig debería funcionar, pero puede que no funcione exactamente como lo deseaba. Por favor tome nota de los cambios.

 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) def main(): while True: print ("Do you want to...") print ("1. Time your solving") print ("2. See your solvings") dothis = input(":: ") if dothis == "1": timeit() elif dothis == "2": sorted_times = sorted(times) sorted_times.reverse() for curr_time in sorted_times: print("%d - %f" % ((sorted_times.index(curr_time)+1), curr_time)) break else: print ("WTF? Please enter a valid number...") main() 

Para el progtwig principal, puede declararlo en la parte superior. No habrá ninguna advertencia. Pero, como se ha dicho, la mención global no es útil aquí. Cada variable puesta en el progtwig principal está en el espacio global. En las funciones, debe declarar que desea utilizar el espacio global para él con esta palabra clave.