如何访问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之外创建变量?!我想你的意思是“无”,也就是把两个变量都初始化为“无”,并在最后返回它们。。。