복붙노트

[PYTHON] 파이썬`for` 문법 : 블럭 코드 vs 싱글 라인 생성자 표현식

PYTHON

파이썬`for` 문법 : 블럭 코드 vs 싱글 라인 생성자 표현식

나는 블록 코드 문맥에서 for 루프를 잘 알고있다. 예 :

for c in "word":
    print c

나는 단지 다르게 사용하는 몇 가지 예를 발견했다. for 문으로 시작하는 대신 식 끝에서 태그를 붙입니다 (들여 쓰기 된 코드 블록은 포함하지 않습니다). 예 :

sum(x*x for x in range(10))

누구든지 나를 위해이 사용을 설명하는 몇 가지 설명서를 가르쳐 주시겠습니까? 예제를 찾을 수 있었지만 설명은 찾을 수 없었습니다. 내가 찾은 모든 문서는 이전 사용을 설명합니다 (블록 코드 예제). 이 사용법을 무엇이라고 부를지 모르겠다. 그래서 내 질문의 제목이 불분명하면 사과드립니다.

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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))
    
  5. from https://stackoverflow.com/questions/12920214/python-for-syntax-block-code-vs-single-line-generator-expressions by cc-by-sa and MIT license