una txt sobreescribir partir lista importar guardar gestion español ejercicios crear como binarios archivos archivo python

txt - guardar una lista en un archivo python



Hacer la definición de la función en una orden de archivo python independiente (5)

Nunca me he encontrado con un caso donde "forward-function-definition" sea necesario ... ¿No puedes simplemente mover print_something() dentro de tu función principal ...?

def do_something(ds_parameter): helper_function(ds_parameter) .... def print_something(): do_something(my_value) def helper_function(hf_parameter): .... def main() print_something() .... main()

A Python no le importa que helper_function () se defina después de su uso en la línea 3 (en la función do_something )

Recomiendo usar algo como WinPDB y recorrer tu código. Muestra muy bien cómo funciona el analizador / ejecutor (?) De Python

Yo uso Python CGI. No puedo llamar a una función antes de que esté definida.

En Oracle PL / SQL había este truco de "declaración directa": nombrar todas las funciones en la parte superior, por lo que el orden de definición no importa.

¿Hay un truco así en Python también?

ejemplo:

def do_something(ds_parameter): helper_function(ds_parameter) .... def helper_function(hf_parameter): .... def main(): do_something(my_value) main()

David tiene razón, mi ejemplo es incorrecto. Qué pasa:

<start of cgi-script> def do_something(ds_parameter): helper_function(ds_parameter) .... def print_something(): do_something(my_value) print_something() def helper_function(hf_parameter): .... def main() .... main()

¿Puedo "declarar adelante" las funciones en la parte superior del script?


Suponiendo que tiene algún fragmento de código que llama a su función principal después de haber sido definida, entonces su ejemplo funciona como está escrito. Debido a la forma en que se interpreta Python, no es necesario definir ninguna función que el cuerpo de do_something cuando se define la función do_something.

Los pasos que tomará Python mientras ejecuta su código son los siguientes.

  1. Define la función do_ algo.
  2. Defina la función helper_function.
  3. Definir la función principal.
  4. (Dado mi supuesto anterior) Llame al principal.
  5. Desde main, llame a do_ algo.
  6. Desde do_something , llame a helper_function.

La única vez que Python se preocupa de que exista helper_function es cuando llega al paso seis. Debería poder verificar que Python llega al paso seis antes de generar un error cuando intenta encontrar helper_function para que pueda llamarlo.


Todas las funciones deben definirse antes de que se usen.

Sin embargo, las funciones se pueden definir en cualquier orden, siempre y cuando todas estén definidas antes de que cualquier código ejecutable use una función.

No necesita "enviar declaración" porque todas las declaraciones son completamente independientes entre sí. Siempre que todas las declaraciones lleguen antes que todo código ejecutable.

¿Estás teniendo un problema? Si es así, publique el código que no funciona.

En su ejemplo, print_something() está fuera de lugar.

La regla: todas las funciones deben definirse antes de cualquier código que funcione realmente

Por lo tanto, ponga todas las declaraciones que funcionan al final .


Una mejor ilustración de su punto sería:

def main(): print_something() .... def do_something(ds_parameter): helper_function(ds_parameter) .... def print_something(): do_something(my_value) def helper_function(hf_parameter): .... main()

En otras palabras, puede mantener su definición de main() en la parte superior, para facilitar la edición, evitando el desplazamiento frecuente, si dedica la mayor parte del tiempo a la edición principal.


def funB(d,c): return funA(d,c) print funB(2,3) def funA(x,y): return x+y

El código anterior devolverá Error. Pero, el siguiente código está bien ...

def funB(d,c): return funA(d,c) def funA(x,y): return x+y print funB(2,3)

Por lo tanto, aunque definitivamente debe definir la función antes de realizar cualquier trabajo real, es posible alejarse si no utiliza la función explícitamente. Creo que esto es algo similar a la creación de prototipos en otros idiomas ...