ホームページ >バックエンド開発 >Python チュートリアル >楽な Python 設定ファイルを目指して バージョン Ø

楽な Python 設定ファイルを目指して バージョン Ø

Barbara Streisand
Barbara Streisandオリジナル
2024-12-05 01:40:13746ブラウズ

Towards Effortless Python Configuration Files Version Ø

導入

私たちは、外部プロパティによるカスタマイズを必要とする多くの Python アプリケーション、またはハードコードされていないプロパティやランタイム構成プロパティをカスタマイズしたり、動作に影響を与えたいアプリケーションを作成します。 ソリューションを Google でさまざまに検索すると、実際には機能するものの、実際のアプリケーションに適切に拡張できないコード サンプルを示すチュートリアルが表示されます。

これらの一連の記事は、アプリケーション構成プロパティを管理するための、シンプルで保守可能、簡単に拡張可能なメカニズムを目指して、リファクタリングと再実装を繰り返しながら、さまざまな実装を通じた私の取り組みを文書化しています。

バージョン Ø

私が見つけたチュートリアル バージョンは、ライブラリ開発者が実装が機能することを証明するために提供するコード スニペットを拡張したものにすぎません。 これは概念実証を提供するには十分ですが、これらのスニペットはアプリケーションの現実世界では拡張できません。

次のコード スニペットは、この例です。

import configparser

def create_config():
    config = configparser.ConfigParser()

    # Add sections and key-value pairs
    config['General'] = {
      'debug': 'True', 
      'log_level': 'info'
    }
    config['Database'] = {
      'db_name': 'example_db',
      'db_host': 'localhost', 
      'db_port': '5432'
    }

    with open('config.ini', 'w') as configfile:
        config.write(configfile)


if __name__ == "__main__":
    create_config()

このコード スニペットでは確かに設定値を永続化できますが、これらの永続化された値を読み取るという問題が残ります。 繰り返しますが、実装開発者スニペットは、次のコード スニペットに示すように、これらの値を取得する方法に関するサンプル コードを提供します。

import configparser

def read_config():
    config = configparser.ConfigParser()

    config.read('config.ini')

    # Access values from the configuration file
    debug_mode = config.getboolean('General', 'debug')
    log_level = config.get('General', 'log_level')
    db_name = config.get('Database', 'db_name')
    db_host = config.get('Database', 'db_host')
    db_port = config.get('Database', 'db_port')

    # Return a dictionary with the retrieved values
    config_values = {
        'debug_mode': debug_mode,
        'log_level': log_level,
        'db_name': db_name,
        'db_host': db_host,
        'db_port': db_port
    }

    return config_values

if __name__ == "__main__":
    # Call the function to read the configuration file
    config_data = read_config()

    # Print the retrieved values
    print('Debug Mode',       config_data['debug_mode'])
    print('Log Level',         config_data['log_level'])
    print('Database Name', config_data['db_name'])
    print('Database Host', config_data['db_host'])
    print('Database Port', config_data['db_port'])

結論

上記のコードには多くの問題があることがわかります。 小規模なスクリプトでは完全に許容されますが、コードでは、実際の Python 変数名に関連する文字列値の使用と、大規模なコード ベース全体での潜在的な拡散に問題があります。 これはグローバル定数を使用することで軽減される可能性がありますが、私の意見では、これは拡張性がなく、Andrew Hunt と David Thomas が独創的な著書『The Pragmatic Programmer』で提唱した基本的なソフトウェア設計原則に従っておらず、DRY に失敗しているためです。原則、別名「自分自身を繰り返さない」。

この記事のソースコードはここにあります。

私が概説した問題のいくつかを解決するための初期実装を文書化した次回の投稿を参照してください。

以上が楽な Python 設定ファイルを目指して バージョン Øの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。