BETA

【Python】os.getenvとos.environ.getの違い

投稿日:2019-07-24
最終更新:2019-07-24
※この記事は外部サイト(https://qiita.com/1ntegrale9/items/94ec443...)からのクロス投稿です

結論から言うと

違いはありません。等価です。

以下、順を追って詳細を説明します。

Pythonにおける環境変数の取得方法

まず前提のお話から。
主に3通りありますね。

  1. os.getenv('ENV_VAL')
  2. os.environ.get('ENV_VAL')
  3. os.environ['ENV_VAL']

それぞれ、何が違うのでしょうか?

os.getenv の仕様

https://docs.python.jp/3/library/os.html#os.getenv

環境変数 key が存在すればその値を返し、存在しなければ default を返します。
key、default、および返り値は文字列です。

とのことで、もし環境変数がなくともKeyErrorがraiseされず、
第二引数(キーワード引数)のdefaultの値が返ります。
(指定しなければNoneが返ります)

os.environ.get の仕様

そもそも os.environ

文字列の環境を表す マップ型 オブジェクトです。

とあるようにマップ型オブジェクトなので、
getメソッド を使うことができます。

getメソッドの仕様は

key が辞書にあれば key に対する値を、そうでなければ default を返します。
default が与えられなかった場合、デフォルトでは None となります。
そのため、このメソッドは KeyError を送出することはありません。

とのことで、os.getenvos.environ.get は同様の動作であることが分かります。

os.environ.get('ENV_VAL')os.environ['ENV_VAL'] の違いは、
KeyErrorをraiseするか否かです。

os.getenv と os.environ.get の違い

本題です。

実は stackoverflow にも同様の質問 があります。
簡潔にまとめると、os.getenvos.environ.get の wrapper とのことです。
※ CPythonの実装の場合

実装 を見てみると、

def getenv(key, default=None):  
    """Get an environment variable, return None if it doesn't exist.  
    The optional second argument can specify an alternate default.  
    key, default and the result are str."""  
    return environ.get(key, default)  

となっており、wrapper というよりもはや alias ですね。

まとめ

os.getenvos.environ.get の alias です。
メモリや実行速度の比較をする必要もないと思います。

公式でもどちらを推奨という話はありませんので、
お好みでお使いください。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

備忘録のようなもの

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!