Python können Sie zuweisen mehr als eine Variable auf einmal, wie folgt aus:
a, b = 1, 2
wie dies funktioniert, ist durch die linke Seite der Zuordnung a, b
als Tupel behandelt und in dem Tupel 1, 2
auf der rechten Seite jedes Element Zuweisen es .
Da Tupel hat nur ein Element, das folgende funktioniert auch:
a, = 1,
Die rechte Seite einer Mehrfachzuordnung nicht ein Tupel sein muss. Jede iterable tun wird, solange die Anzahl der Elemente auf jeder Seite ist das gleiche:
a, b, c = "three little pigs".split()
Wenn die Anzahl der Elemente nicht überein:
a, b, c = "oh", "no"
... Sie erhalten einen ValueError
:
ValueError: not enough values to unpack (expected 3, got 2)
alle der oben genannten zusammen~~POS=TRUNC, dann Ihre Funktion:
def find_project(project_name):
projects = get_projects()
try:
match, = (proj for proj in projects if proj["name"].strip() == project_name)
return match
except ValueError:
return None
... iteriert über die generator expression
(proj for proj in projects if proj["name"].strip() == project_name)
... und wenn das Ergebnis ein Element hat, weist dieses Element zu match
. Ist dies nicht der Fall, wird ValueError
ausgelöst (und von der Klausel except
abgefangen), keine Zuweisung erfolgt und None
wird zurückgegeben.
Zwei Dinge zu beachten:
Das Komma ,
leicht ist, wenn Code-Lese zu verpassen. Eine Alternative wäre die Liste Syntax auf der linken Seite verwenden:
[match] = (proj for proj in projects if proj["name"].strip() == project_name)
..., die die gleiche Wirkung hat.
Wenn die rechte Seite ein Generator Ausdruck (oder eine andere Art von iterator) ist, können Sie next()
mit einem Standardwert verwenden statt:
def find_project(project_name):
projects = get_projects()
it = (proj for proj in projects if proj["name"].strip() == project_name)
return next(it, None)
..., die kürzer und besser lesbar ist.