如何访问python函数中声明的变量
下面的代码读取配置文件并将结果存储在一些变量中作为列表如何访问python函数中声明的变量,python,function,variables,configparser,Python,Function,Variables,Configparser,下面的代码读取配置文件并将结果存储在一些变量中作为列表 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',
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\u bsc\u mdls
和php\u adv\u mdls
类似于read\u config\u file.php\u bsc\u mdls
或read\u config\u file.php\u adv\u mdls
那么可以从python函数中访问/获取变量吗?您只需要返回它们。当函数结束时,它们就不存在了
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
def a():
a.x = 10
a()
print a.x # >> 10
无论哪种情况,您都需要在调用函数时检查返回值。如果值为“无”或“否”
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...
使用类变量和静态方法加载配置文件一次
正如有人说的那样,这样做是合理的回报 但是 在python中,函数是对象,因此可以像这样执行smth:
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
def a():
a.x = 10
a()
print a.x # >> 10
最后一个虽然不是好代码的例子,但在本例中。
return(php\u bsc\u mdls,php\u adv\u mdls)
我得到了这个错误AttributeError:“function”对象没有属性“php\u bsc\u mdls”,当我试图访问像read\u config\u file.php\u bsc\u mdls这样的文件时,这取决于,从根本上讲,python中有一种方法可以访问函数的本地环境,但是如果必须这样做,那么您就没有做正确的事情!如果两个if子句都没有命中,那么变量就不会被创建(python是一种解释语言),因此您需要重写这个函数,让它返回这个值,初始化为None…k我试过了,并得到错误AttributeError:'function'对象没有属性'php_bsc_mdls',当我尝试读取_config_file.php_bsc_mdls时,您需要检查它们是否已创建。将相应地修改代码。是的,我们可以使用类来完成,但尝试使用python函数来实现它我在这里假设,您要么只有basic,要么两者都有。但是你可以修改它。因为如果不满足codition config.has_选项,将不会创建变量。您还可以在if子句null之外创建变量?!我想你的意思是“无”,也就是把两个变量都初始化为“无”,并在最后返回它们。。。