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

[понимание списка] (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 (ключ) для ключа в wanted_keys', это также понимание списка? – Kittystone

Смежные вопросы