2017-02-19 57 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