[PYTHON] 파이썬`for` 문법 : 블럭 코드 vs 싱글 라인 생성자 표현식
PYTHON파이썬`for` 문법 : 블럭 코드 vs 싱글 라인 생성자 표현식
나는 블록 코드 문맥에서 for 루프를 잘 알고있다. 예 :
for c in "word":
print c
나는 단지 다르게 사용하는 몇 가지 예를 발견했다. for 문으로 시작하는 대신 식 끝에서 태그를 붙입니다 (들여 쓰기 된 코드 블록은 포함하지 않습니다). 예 :
sum(x*x for x in range(10))
누구든지 나를 위해이 사용을 설명하는 몇 가지 설명서를 가르쳐 주시겠습니까? 예제를 찾을 수 있었지만 설명은 찾을 수 없었습니다. 내가 찾은 모든 문서는 이전 사용을 설명합니다 (블록 코드 예제). 이 사용법을 무엇이라고 부를지 모르겠다. 그래서 내 질문의 제목이 불분명하면 사과드립니다.
해결법
-
==============================
1.당신이 가리키는 것은 Generator in Python입니다. 보세요: -
당신이 가리키는 것은 Generator in Python입니다. 보세요: -
다음과 같은 문서를 참조하십시오. - 게시자가 게시 한 예제와 정확히 동일한 Generator 표현식
설명서에서 : -
생성기는 대괄호 대신 대괄호로 사용하는 목록 이해와 비슷하지만 더 많은 메모리가 효율적입니다. 그들은 결과의 전체 목록을 동시에 반환하지 않지만 생성자 객체를 반환합니다. 생성자 객체에서 next ()를 호출 할 때마다 생성기는 yield를 사용하여 다음 값을 반환합니다.
위의 코드에 대한 목록 이해는 다음과 같습니다.
[x * x for x in range(10)]
for의 끝에 결과를 필터링하는 조건을 추가 할 수도 있습니다.
[x * x for x in range(10) if x % 2 != 0]
숫자가 2로 나눌 수없는 경우 1에서 5 범위에서 2를 곱한 숫자 목록을 반환합니다.
수율 사용을 묘사하는 발전기의 예는 다음과 같습니다.
def city_generator(): yield("Konstanz") yield("Zurich") yield("Schaffhausen") yield("Stuttgart") >>> x = city_generator() >>> x.next() Konstanz >>> x.next() Zurich >>> x.next() Schaffhausen >>> x.next() Stuttgart >>> x.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
그러면 next ()에 대한 모든 호출은 생성자에서 다음 yield ()를 실행한다는 것을 알 수 있습니다. 그리고 결국 그것은 StopIteration을 던집니다.
-
==============================
2.그것들은 생성자 표현식이며 목록 내포물과 관련이 있습니다.
그것들은 생성자 표현식이며 목록 내포물과 관련이 있습니다.
목록 작성을 통해 목록을 쉽게 작성할 수 있습니다. 예를 들어 완벽한 사각형의 목록을 만들고 싶다면 다음과 같이하면됩니다.
>>> squares = [] >>> for x in range(10): ... squares.append(x**2) ... >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
하지만 대신 목록 이해력을 사용할 수 있습니다.
squares = [x**2 for x in range(10)]
생성자 표현식은 목록 대신 생성기 객체를 반환한다는 점을 제외하고는 목록 내포와 같습니다. 이 생성자 객체는 목록 내장과 비슷한 방식으로 반복 할 수 있지만 목록 작성시 목록을 작성한 경우처럼 전체 목록을 한 번에 메모리에 저장할 필요가 없습니다.
-
==============================
3.귀하의 구체적인 예를 생성자 표현이라고합니다. 리스트 comprehensions, 사전 comprehensions, set comprehensions은 의미가 비슷하다. (다른 결과 타입과 generator expression은 게으르다.) 같은 구문을 가지며, 다른 종류의 대괄호 안에 있고, expr1 : expr2를 갖는 dict comprehension의 경우 단일 표현식 대신에 (x * x).
귀하의 구체적인 예를 생성자 표현이라고합니다. 리스트 comprehensions, 사전 comprehensions, set comprehensions은 의미가 비슷하다. (다른 결과 타입과 generator expression은 게으르다.) 같은 구문을 가지며, 다른 종류의 대괄호 안에 있고, expr1 : expr2를 갖는 dict comprehension의 경우 단일 표현식 대신에 (x * x).
-
==============================
4.생성자 표현식에 대한 문서는 https://www.python.org/dev/peps/pep-0289/에서 확인할 수 있습니다. 다음은 생성자 표현식을 사용하는 코드입니다.
생성자 표현식에 대한 문서는 https://www.python.org/dev/peps/pep-0289/에서 확인할 수 있습니다. 다음은 생성자 표현식을 사용하는 코드입니다.
list(x**2 for x in range(0,10))
from https://stackoverflow.com/questions/12920214/python-for-syntax-block-code-vs-single-line-generator-expressions by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 장고 양식 '초기'와 '바운드 데이터'의 차이점은 무엇입니까? (0) | 2018.10.23 |
---|---|
[PYTHON] 동일한 속성을 참조하는 SQLAlchemy ORM에서 자체 참조 다 대다 관계를 어떻게 성취 할 수 있습니까? (0) | 2018.10.23 |
[PYTHON] 단위 테스트에서 open (file_name) 조롱 (0) | 2018.10.23 |
[PYTHON] Tensorflow r1.0 : 요구 사항을 만족하는 버전을 찾을 수 없습니다. tensorflow (0) | 2018.10.23 |
[PYTHON] 없음 값이있는 Pyspark 데이터 프레임 열 필터링 (0) | 2018.10.23 |