Inicialización de variables en Python usando una función separada de main()

publicado por: Anonymous

Para inicializar algunas variables en un programa escrito en Python (de forma estructurada, sin usar programación orientada a objetos), quiero utilizar una función denominada inicializacion(), a la cual se invoca desde una función main(). El problema es el ámbito de estas variables, ya que si les doy su valor inicial en la función inicializacion(), al tratar de usarlas en la función main() se va a generar un error porque allí no existen. Por ejemplo:

import serial

def inicializacion():
    puerto = '/dev/ttyACM0'
    baudRate = 115200
    buffer = ''
    ser = serial.Serial(puerto, baudRate, timeout=1)


def main():
    inicializacion()
    buffer = buffer + leerDatos(ser)

¿Qué alternativas hay para evitar el uso de “global” en la función de inicialización? ¿Es posible implementar alguna solución sin tener que pasar las variables como argumentos y sin tener que devolverlas en el “return”?

solución

Pues, no creo que esto sea posible sin recurrir a la altamante no recomendada global. El caso específico que muestras aplica perfectamente en la Programación Orientada a Objetos, sería bueno que expliques la razón por la cual estás tratando de evitarla:

import serial


class Clase():
    def __init__(self, puerto, baud_rate, buffer) # inicializacion()
        self.puerto = puerto
        self.baud_rate = baud_rate
        self.buffer = buffer
        self.serial = serial.Serial(puerto, baudRate, timeout=1)

    def leer_datos(self):
        # Tu código

Si estas intentando usar los parámetros de configuración, podrías crear un archivo específico el cual será importado a demanda:

settings.py

puerto = '/dev/ttyACM0'
baudRate = 115200
buffer = ''

main.py

import serial
import settings


def main():
    ser = serial.Serial(settings.puerto, settings.baudRate, timeout=1)
    buffer = settings.buffer + leerDatos(ser)

Otra opción es la mencionada por @Carlangueitor en la cual tu configuración la mueves a un archivo .env dentro de tu proyecto y así evitas exponer la configuración en uno de los archivos. Puedes usar dotenv.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *