2017-02-19 22 views
0

私は次のことを理解しようとしています:次の部分はどのように機能していますか?

outer_dir=os.path.expanduser("/home/nsingh/ansible-environments/aws") 
print (outer_dir) 
random_names = os.listdir(outer_dir) 
print (random_names) 
_____________________________________________________________ 
inner_dirs = [ 
    os.path.join(outer_dir, name, "inventory/group_vars") 

    for name in random_names 
] 

print (inner_dirs) 

inner_dirs = [name for name in inner_dirs if os.path.isdir(name)] 
__________________________________________________________________ 

一部ボックスの内側には、私はその実行中か明確にしても理解して欲しいものです。助けてもらえますか?

+0

[list comprehension](http://www.secnetix.de/olli/Python/list_comprehensions.hawk)? – Scimonster

答えて

1

これらは、list comprehensions、あなたはジェネレータ式内の動的リストコンテンツを生成できるようにするPythonの構文要素です。繰り出されたときに

基本的には、このコードは次のようになります。

inner_dirs = [] 
for name in random_names: 
    element = os.path.join(outer_dir, name, "inventory/group_vars") 
    inner_dirs.append(element) 

print(inner_dirs) 

new_inner_dirs = [] 
for name in inner_dirs: 
    if os.path.isdir(name): 
     new_inner_dirs.append(name) 

inner_dirs = new_inner_dirs 

これは明らかに最適ではないので、このような内包表記は、あなたがすることができます(ので、より多くの時間とメモリがかかり、不要なリストおよび添付の作成が含まれ)ループをより明確に、より簡潔に、効率的にする。次のように

評価順序は次のとおりです。

[(3) for i in (1) if (2)] 

(1)は、一度だけ入力して評価(2)(3)は独立 (1)は、反復可能なオブジェクトである必要があり、各反復で評価を取得取得し、(2)ができる値を返す必要がありますタイプに変換するbool

+0

美しく、私は初心者で、Pythonを理解したいのですが、Pythonの学習を始めるためにいくつかのリンクを教えてください。 – Kittystone

+0

@Kittystoneもしあなたが技術文献を読んでいるなら、[Python docs](https://docs.python.org) /3.5/tutorial/index.html)は、すぐにダイビングするのに適しています。初心者やオンラインコースを受講するためにPythonに関する本を読むことを検討してください。 – Leva7

+0

もう少し小さなもの、 'this_file_values = [items .get(キー)for wanted_keys'のキー、そのリストの理解? – Kittystone

関連する問題