파이썬은 당신이 할당 할 수 있습니다 둘 이상의 변수에 일단이 같은
a, b = 1, 2
이것에 오른쪽 튜플 1, 2
각 요소를 튜플 할당 a, b
의 좌측을 처리하고 할당하는 것이다 작동 방식 그것 . 튜플은 하나 개의 요소가있을 수 있기 때문에
, 다음도 작동합니다
a, = 1,
여러 과제의 오른쪽은 튜플 일 필요는 없습니다. 요소의 수가 일치하지 않는 경우
a, b, c = "three little pigs".split()
:
a, b, c = "oh", "no"
을 ... 당신이 ValueError
을 얻을 모든 반복자는 긴 양쪽에있는 요소의 수와 동일 할 것 :
ValueError: not enough values to unpack (expected 3, got 2)
함께 위의 모든 퍼팅, 다음, 함수 :
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
generator expression
(proj for proj in projects if proj["name"].strip() == project_name)
이상 반복 ... ... 그 결과는 하나 개의 요소가있는 경우에 그 match
요소를 할당한다. 그렇지 않은 경우 ValueError
이 발생하고 except
절에 걸리면 할당이 수행되지 않고 None
이 반환됩니다.
두 가지 참고 사항 :
쉼표 ,
코드를 읽을 때 놓치기 쉽습니다. 다른 방법으로는 왼쪽에 목록 구문을 사용하는 것입니다.
[match] = (proj for proj in projects if proj["name"].strip() == project_name)
... 같은 효과가 있습니다.
오른쪽이 발전기 표현 (또는 iterator의 다른 종류), 대신 기본 값으로 next()
사용할 수 있습니다 : 더 짧고 읽을 수
def find_project(project_name):
projects = get_projects()
it = (proj for proj in projects if proj["name"].strip() == project_name)
return next(it, None)
이 ....