Cómo acceder a las variables declaradas dentro de las funciones en python

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.