2017-02-19 54 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文檔](https://docs.python.org /3.5/tutorial/index.html)是一個很好的潛入其中的地方。如果不是,請考慮閱讀一些關於Python的書籍,以供初學者或參加在線課程 - 其中有很多 – Leva7

+0

多一個小東西,'this_file_values = [items .get(key)for wanted_keys'中的鍵,它也是一個列表理解? – Kittystone