我有以下代码读取配置文件并将结果作为列表存储在某些变量中
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(',')
现在我想从函数中获取结果变量php_bsc_mdls
和php_adv_mdls
类似read_config_file.php_bsc_mdls
或read_config_file.php_adv_mdls
那么可以从python函数访问/获取变量吗?
答案 0 :(得分:1)
你只需要归还它们。当函数结束时它们不再存在。
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
其他方法是将类保存到类变量的类。然后从类中获取这些值,而不是函数。
或者像这样:
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
在任何一种情况下,您都需要检查调用函数的返回值。如果值为none或不是。
答案 1 :(得分:0)
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()
或者,你可以为此做一个课程。
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...
使用类变量和静态方法加载配置文件一次。
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.
答案 2 :(得分:0)
正如所说的那样回归是合理的。
但是...
在python函数中是对象,所以你可以这样做:
def a():
a.x = 10
a()
print a.x # >> 10
最后虽然不是好代码的例子,但在这种情况下。