2017-02-19 3 views
0

Ich versuche folgendes zu verstehen:Wie funktioniert der folgende Teil?

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)] 
__________________________________________________________________ 

Der Teil in der Box ist, was ich klar und auch zu verstehen, wie seine ausgeführt werden. Kann jemand helfen?

+0

konvertiert werden Das [Listenverständnis] (http://www.secnetix.de/olli/Python/list_comprehensions.hawk)? – Scimonster

Antwort

1

Dies sind list comprehensions, Elemente Python-Syntax, mit denen Sie die Liste Inhalt dynamisch generieren innerhalb der Generator Ausdrücke.

Grundsätzlich, wenn abgerollt, dieser Code würde wie folgt aussehen:

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 

Das ist offensichtlich nicht optimal ist (betrifft die Schaffung von nicht benötigten Listen und Anfügen, so dass mehr Zeit und Speicher kostet) so wie zum Comprehensions ermöglicht es Ihnen, Machen Sie Ihre Schleifen klarer, prägnanter und effizienter.

Die Auswertungsreihenfolge ist wie folgt:

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

(1) nur einmal ausgewertet wird auf eingeben, (2) und (3) bei jeder Iteration ausgewertet erhalten unabhängig (1) sollte ein iterable Objekt sein, (2) einen Wert zurückgeben sollte das kann zum Typ bool

+0

schön, ich bin ein Anfänger und will Python besser verstehen können Sie mir einige weitere Links zum Start Python lernen – Kittystone

+0

@Kittystone, wenn Sie gut mit dem Lesen von Fachliteratur sind, [Python docs] (https://docs.python.org /3.5/tutorial/index.html) ist ein guter Ort, um direkt einzutauchen. Wenn nicht, lese ein paar Bücher über Python für Anfänger oder nimm Online-Kurse - es gibt viele davon – Leva7

+0

noch eine kleine Sache, 'this_file_values ​​= [items .get (key) für Schlüssel in wanted_keys', ist es auch ein Listenverständnis? – Kittystone

Verwandte Themen