119
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Advent Calendar 2018

Day 24

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

Last updated at Posted at 2018-09-01

結論から言うと

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

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

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

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

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

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

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 の違い

本題ですが、実は 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)

このように os.getenvos.environ.getwrapper となっています。
更に言えばメソッドを置き換える以外何もしてないため、
wrapper と言うよりはもはや alias です。

まとめ

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

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

参考リンク

119
73
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
119
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?