Tengo el siguiente código que lee el archivo de configuración y almacena los resultados en algunas variables como una lista
import ConfigParser def read_config_file(): config = ConfigParser.ConfigParser() cnf_path = 'config_files/php.sr' config.read(cnf_path) if config.has_section('basic'): if config.has_option('basic', 'basic'): php_bsc_mdls = config.get('basic', 'basic').split(',') if config.has_section('advance'): if config.has_option('advance','advance'): php_adv_mdls = config.get('advance', 'advance').split(',')
Ahora quiero obtener las variables de resultado php_bsc_mdls
y php_adv_mdls
de la función algo como read_config_file.php_bsc_mdls
o read_config_file.php_adv_mdls
Entonces, ¿es posible acceder / obtener las variables de la función python?
Solo tienes que devolverlos. Ellos dejan de existir cuando la función termina.
def read_config_file(): config = ConfigParser.ConfigParser() cnf_path = 'config_files/php.sr' config.read(cnf_path) if config.has_section('basic'): if config.has_option('basic', 'basic'): php_bsc_mdls = config.get('basic', 'basic').split(',') if config.has_section('advance'): if config.has_option('advance','advance'): php_adv_mdls = config.get('advance', 'advance').split(',') if php_bsc_mdls and php_adv_bls: return php_bsc_mdls,php_adv_mdls elif php_bsc_mdls: return php_bsc_mdls, None
Otro enfoque sería una clase donde los guarde en las variables de clase. Y luego obtén esos valores de la clase, no la función.
O así:
def read_config_file(): php_bsc_mdls = None php_adv_mdls = None config = ConfigParser.ConfigParser() cnf_path = 'config_files/php.sr' config.read(cnf_path) if config.has_section('basic'): if config.has_option('basic', 'basic'): php_bsc_mdls = config.get('basic', 'basic').split(',') if config.has_section('advance'): if config.has_option('advance','advance'): php_adv_mdls = config.get('advance', 'advance').split(',') return php_bsc_mdls, php_adv_mdls
En cualquier caso, debe verificar los valores de retorno donde quiera que llame a la función. Si los valores son ninguno o no.
def read_config_file(): php_bsc_mdls, php_adv_mdls = None, None # Init to None. ... return php_bsc_mdls, php_adv_mdls # Return at end. # Get results basic, advanced = read_config_file()
Alternativamente, podrías hacer una clase para esto.
class Config: php_adv_mdls = None php_bsc_mdls = None @staticmethod def read_config_file(): if not Config.php_adv_mdls and not Config.php_bsc_mdls: # Load the data here. config = ConfigParser.ConfigParser() ... Config.php_adv_mdls = config.get... Config.php_bsc_mdls = config.get...
Utilice las variables de clase y los métodos estáticos para cargar sus archivos de configuración una vez .
Config.php_adv_mdls # None Config.read_config_file() # Loads the data from config. Config.read_config_file() # Will only attempt another load if either # class variable in not valid. Config.php_bsc_mdls # If successful, will be initialize with data.
Como se dijo, sería razonable hacer esto con la devolución.
Pero…
En python, las funciones son objetos, por lo que puedes hacer algo así:
def a(): ax = 10 a() print ax # >> 10
Último, aunque no es un ejemplo de buen código, en este caso.