Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Uso de variables globales desde programa python que tiene varios módulos.
#1
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()
Responder
#2
El máximo alcance que obtendrás de una variable es en un mimsmo archivo, no puedes cambiar el valor de variables que se encuentran en otros. No obstante, no deberías tener necesidad de ello; usando clases o bien pasando los valores como argumentos resulta en un código más óptimo.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)