5

ab.py

from ddr import Options
debugElmo     = int(Options.env['GG_DEBUG_ELMO'])
postdevElmo   = int(Options.env['GG_POST_DEV_ELMO'])

Options.py

vars_of_interest = (
    'AA_PYTHON',
    'GG_POST_DEV_ELMO',
    'GG_DEBUG_ELMO',
    )
env = dict((var, os.getenv(var, 0)) for var in vars_of_interest)

私はenv = dict((var, os.getenv(var, 0)) for var in vars_of_interest)Pythonにかなり慣れていないので、何が起こっているのかわかりません

env は Options.py の python の関数ですか?
dict() とは何ですか?
var は からの変数int(Options.env['GG_DEBUG_ELMO'])ですか?

4

2 に答える 2

7

多くの場合、Python インタープリターでその部分を見ることで、Python コードが何をしているかを知ることができます。

>>> vars_of_interest
('AA_PYTHON', 'GG_POST_DEV_ELMO', 'GG_DEBUG_ELMO')

>>> import os

>>> [(var, os.getenv(var, 0)) for var in vars_of_interest]
[('AA_PYTHON', 0), ('GG_POST_DEV_ELMO', 0), ('GG_DEBUG_ELMO', 0)]

>>> env = dict((var, os.getenv(var, 0)) for var in vars_of_interest)
>>> env
{'AA_PYTHON': 0, 'GG_DEBUG_ELMO': 0, 'GG_POST_DEV_ELMO': 0}

env = dict(...)を作りenvますdict。オブジェクトが何であるかわからない場合は、いつでもそのタイプを尋ねることができます:

>>> type(env)
dict

Adictは、キーと値の間のマッピングです。この場合、は などの文字列と などの値envの間のマッピングです。'AA_PYTHON'0

varジェネレータ式で使用される一時変数です

((var, os.getenv(var, 0)) for var in vars_of_interest)

ジェネレーター式のfor var in vars_of_interestは、 Python に tuple 内のアイテムを反復処理し、ループを反復するときに値を 1 つずつvars_of_interest割り当てるように指示します。varジェネレータ式はイテレータです。(var, os.getenv(var, 0))イテレータはfor eachの値を生成しますvar

(var, os.getenv(var, 0))は、キーと値のペアと考えることができるタプルです。varはキー、os.getenv(var, 0)は値です。os.getenvは環境変数var(例: 'AA_PYTHON') を検索し、存在する場合は環境変数の値を返し、存在しない場合は 0 を返します。

dict式で行われているように、キーと値のペアの反復子が渡される場合

dict((var, os.getenv(var, 0)) for var in vars_of_interest)

dict指定されたキーを指定された値にマップする を返します。

Python dictsの詳細については、こちらを参照してください。

于 2013-06-27T20:02:35.390 に答える
3

env2 番目の例では、リスト内包表記を使用して名前付き辞書を作成します。

辞書とは 連想リストです。辞書は配列に似ていると考えることができますが、数字によってインデックス付けされる代わりに、他の何かによってインデックス付けされる点が異なります。この場合、環境変数の名前である文字列によってインデックスが付けられます。

リスト内包表記とは リストを作成する方法です。そのリスト内包表記によって作成されるリストは、環境変数名とその環境変数の値のペアのリストです。組み込み関数dictは、このようなペアのリストから辞書を作成します。

于 2013-06-27T20:05:49.893 に答える