Python - Uso de variables globales desde varios módulos.

 
Vista:

Uso de variables globales desde varios módulos.

Publicado por José (1 intervención) el 03/01/2019 00:19:14
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 :
-----------


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 :
-----------


1
2
3
4
5
6
7
8
9
10
11
12
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 :
-----------


1
2
3
4
5
6
7
8
9
10
11
12
13
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()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Uso de variables globales desde varios módulos.

Publicado por tincopasan (1082 intervenciones) el 04/01/2019 05:31:20
me parece muy malo lo que intentas hacer, pero bueno el código es tuyo:
file_1.py :
-----------

1
2
3
4
5
6
7
8
9
10
11
12
i1 = 1
s1 = "1.1.1.1"
 
print ("file_1.py: i1 = {} s1= {} ".format(i1,s1))
 
def Initialization() :
    global i1
    global  s1
    i1 = 10
    s1 = "10.10.10.10"
 
    print ("file_1.py  Initialization(): i1 = {} s1= {}" .format(i1,s1) )

file_2.py :
-----------


1
2
3
4
5
6
import file_1 as nuevo
 
def show_vars() :
    global i1
    global s1
    print ("file_2.py  show_vars(): i1 = {} s1= {}".format(nuevo.i1,nuevo.s1))

file_3.py :
-----------


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import file_1 as archivo1
import file_2 as archivo2
 
 
print ("file_3.py  STEP 1: i1 ={} s1= {} ".format(archivo1.i1,archivo1.s1))
print ("file_3.py  STEP 2: We are going to initialize the global vars.")
 
archivo1.Initialization()
 
print ("file_3.py  STEP 3: i1 ={} s1= {} ".format(archivo1.i1,archivo1.s1))
 
print ("file_3.py  STEP 4: Call show_vars() to print the global vars value.")
 
archivo2.show_vars()

supongo que eso se aproxima a lo que buscas, pero insisto, salvo que sea una mala tarea vas mal encaminado a ahorrar nada.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar