0

構成ファイルを読み取り、結果をいくつかの変数にリストとして保存する次のコードがあります

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関数から変数にアクセス/取得することは可能ですか?

4

3 に答える 3

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 かそうでないか。

于 2013-02-18T07:42:34.423 に答える
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...

クラス変数と静的メソッドを使用して、構成ファイルを1 回ロードします。

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.
于 2013-02-18T08:00:05.190 に答える
0

言われたように、これをリターンで行うのは合理的です。

しかし...

Python では関数はオブジェクトなので、次のように簡単に実行できます。

def a():
    a.x = 10

a()
print a.x    # >> 10

最後に、この場合は良いコードの例ではありません。

于 2013-02-18T08:33:14.067 に答える