02-01-2019, 09:26 PM
Estoy escribiendo un programa python que usa varios módulos.
En file_1.py se declaran las variables globales i1 y s1. Ademas, en este módulo se define la función Initialization,
que modifica el valor de dichas variables.
En file_2.py se define la función show_vars, que muestra el valor de i1 y s1.
En file_3.py se muestra el valor inicial de i1 y s1, se llama a Initialization, se muestra de nuevo su valor y se
llama a show_vars.
Adjunto al final de este mensaje el código fuente de estos módulos.
La salida que esperaba obtener al ejecutar "python file_3.py" es la siguiente :
file_1.py: i1 = 1, s1 = 1.1.1.1
file_2.py: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 1: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 2: We are going to initialize the global vars.
file_1.py Initialization(): i1 = 10, s1 = 10.10.10.10
file_3.py STEP 3: i1 = 10, s1 = 10.10.10.10
file_3.py STEP 4: Call show_vars() to print the global vars value.
file_2.py show_vars(): i1 = 10, s1 = 10.10.10.10
Pero la salida que obtengo realmente es:
file_1.py: i1 = 1, s1 = 1.1.1.1
file_2.py: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 1: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 2: We are going to initialize the global vars.
file_1.py Initialization(): i1 = 10, s1 = 10.10.10.10
file_3.py STEP 3: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 4: Call show_vars() to print the global vars value.
file_2.py show_vars(): i1 = 1, s1 = 1.1.1.1
Esto significa que los cambios que realiza la función Initialization(), definida en file_1.py, no se reflejan
en el valor de las variables globales que ven file_2.py y file_3.py
¿Qué es lo que estoy haciendo mal? ¿Cómo puedo obtener el resultado esperado?
El código fuente de estos módulos es:
file_1.py :
-----------
i1 = 1;
s1 = "1.1.1.1";
print ("file_1.py: i1 = " + str(i1) + ", s1 = " + str(s1))
def Initialization() :
global i1
global s1
i1 = 10
s1 = "10.10.10.10"
print ("file_1.py Initialization(): i1 = " + str(i1) + ", s1 = " + str(s1))
return()
file_2.py :
-----------
from file_1 import *
print ("file_2.py: i1 = " + str(i1) + ", s1 = " + str(s1))
def show_vars() :
global i1
global s1
print ("file_2.py show_vars(): i1 = " + str(i1) + ", s1 = " + str(s1))
return ()
file_3.py :
-----------
from file_1 import *
from file_2 import *
print ("file_3.py STEP 1: i1 = " + str(i1) + ", s1 = " + str(s1))
print ("file_3.py STEP 2: We are going to initialize the global vars.")
Initialization()
print ("file_3.py STEP 3: i1 = " + str(i1) + ", s1 = " + str(s1))
print ("file_3.py STEP 4: Call show_vars() to print the global vars value.")
show_vars()
En file_1.py se declaran las variables globales i1 y s1. Ademas, en este módulo se define la función Initialization,
que modifica el valor de dichas variables.
En file_2.py se define la función show_vars, que muestra el valor de i1 y s1.
En file_3.py se muestra el valor inicial de i1 y s1, se llama a Initialization, se muestra de nuevo su valor y se
llama a show_vars.
Adjunto al final de este mensaje el código fuente de estos módulos.
La salida que esperaba obtener al ejecutar "python file_3.py" es la siguiente :
file_1.py: i1 = 1, s1 = 1.1.1.1
file_2.py: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 1: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 2: We are going to initialize the global vars.
file_1.py Initialization(): i1 = 10, s1 = 10.10.10.10
file_3.py STEP 3: i1 = 10, s1 = 10.10.10.10
file_3.py STEP 4: Call show_vars() to print the global vars value.
file_2.py show_vars(): i1 = 10, s1 = 10.10.10.10
Pero la salida que obtengo realmente es:
file_1.py: i1 = 1, s1 = 1.1.1.1
file_2.py: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 1: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 2: We are going to initialize the global vars.
file_1.py Initialization(): i1 = 10, s1 = 10.10.10.10
file_3.py STEP 3: i1 = 1, s1 = 1.1.1.1
file_3.py STEP 4: Call show_vars() to print the global vars value.
file_2.py show_vars(): i1 = 1, s1 = 1.1.1.1
Esto significa que los cambios que realiza la función Initialization(), definida en file_1.py, no se reflejan
en el valor de las variables globales que ven file_2.py y file_3.py
¿Qué es lo que estoy haciendo mal? ¿Cómo puedo obtener el resultado esperado?
El código fuente de estos módulos es:
file_1.py :
-----------
i1 = 1;
s1 = "1.1.1.1";
print ("file_1.py: i1 = " + str(i1) + ", s1 = " + str(s1))
def Initialization() :
global i1
global s1
i1 = 10
s1 = "10.10.10.10"
print ("file_1.py Initialization(): i1 = " + str(i1) + ", s1 = " + str(s1))
return()
file_2.py :
-----------
from file_1 import *
print ("file_2.py: i1 = " + str(i1) + ", s1 = " + str(s1))
def show_vars() :
global i1
global s1
print ("file_2.py show_vars(): i1 = " + str(i1) + ", s1 = " + str(s1))
return ()
file_3.py :
-----------
from file_1 import *
from file_2 import *
print ("file_3.py STEP 1: i1 = " + str(i1) + ", s1 = " + str(s1))
print ("file_3.py STEP 2: We are going to initialize the global vars.")
Initialization()
print ("file_3.py STEP 3: i1 = " + str(i1) + ", s1 = " + str(s1))
print ("file_3.py STEP 4: Call show_vars() to print the global vars value.")
show_vars()