Python 생 성기 generator 용법 예시
생 성기 generator 는 본질 적 으로 함수 입 니 다.지난번 함수 체 에 있 었 던 위 치 를 기억 합 니 다.생 성기 함수 다음 호출 에 서 는 자동 으로 이 위 치 를 찾 을 수 있 습 니 다.부분 변 수 는 변 하지 않 습 니 다.
l = [x * 2 for x in range(10)] #
g = (x * 2 for x in range(10))
print(l,g) # l ,g generator
generator 의 모든 요 소 를 한꺼번에 인쇄 하여 가 져 옵 니 다:
for index in g:
print(index)
generator 의 요 소 를 점차적으로 가 져 옵 니 다:
print(g.__next__()) # 0
print(g.__next__()) # 2
print(g.__next__()) # 4
print(g.__next__()) # 6
print(g.__next__()) # 8
yield 키워드보통 우리 가 0-50 의 수 를 인쇄 할 때 함 수 를 정의 합 니 다.이 함수 만 호출 하면 0-50 의 수 를 스스로 인쇄 합 니 다.
def fib(num):
n = 0
while n < num:
print(n)
n+=1
fib(50)
사실 우 리 는 그렇게 잃 어 버 리 기만 하면 위의 그 함 수 를 generator 로 바 꿀 수 있다.
def fib(num):
n = 0
while n < num:
yield n # yield , n
n+=1
g = fib(50) # g generator
generator 원리:특정한 알고리즘 을 통 해 특정한 조건 에서 계속 아래로 추산 하여 후속 요 소 를 얻 을 수 있 습 니 다.generator 는 list 를 만 들 필요 가 없 기 때문에 메모리 공간 을 크게 절약 할 수 있 습 니 다.밤 을 들다
def fib():
print("step 1")
yield 1
print("step 2")
yield 2
print("step 3")
yield 3
g = fib()
g.__next__() # :step 1
g.__next__() # :step 2
g.__next__() # :step 3
결과 에 따 르 면 집행next()
할 때마다 한 문장 씩 인쇄 하 다가yield
부 딪 히 면 바로 뛰 어 내 려 위 치 를 기록 하고 다시 집행next()
할 때 기 록 된 그 위치 부터 아래로 집행 하 다가 다시 만 났 을 때 뛰 어 나 오 는 것 으로 나 타 났 다.이때 우 리 는 우리 가 끊임없이 호출
yield
한다 면 이미 끝 났 는 지,경 계 를 넘 으 면 잘못 보고 할 수 있 는 지 를 어떻게 판단 해 야 할 지 생각 하지 않 을 것 이다.
# -* coding:utf-8 -*-
#! python3
'''
Created on 2018 8 10
@author: Administrator
'''
def fib(num):
n = 0
while n < num :
yield n
n+=1
g = fib(10)
while True:
print(g.__next__())
실행 결과:옮 겨 다 니 는 것 이 끝 난 후에 이 호출
next()
이 잘못 되 었 음 을 알 수 있 습 니 다.우 리 는 옮 겨 다 니 는 아래 표 시 를 얻 을 수 없습니다.그러면 우 리 는 어떻게 이 잘못 을 피해 야 합 니까?포 이상 처리
def fib(num):
n = 0
while n < num :
yield n
n+=1
g = fib(10)
while True:
try:
print(g.__next__())
except StopIteration:
print(" ")
break
이 때 오류 가 발생 하지 않 습 니 다.경 계 를 넘 을 때 시스템 은 이 이상 을 자동 으로 포착 하고 출력 하고 자 하 는 정 보 를 인쇄 합 니 다.send 방법
단일 스 레 드 에서 간단 한 병행 효 과 를 실현 하 다.
# -*- coding:utf-8 -*-
#! python3
'''
Created on 2018 8 10
@author: Administrator
'''
import time
def startEat(name):
print("%s "%name)
while True:
b = yield
print("%s %s "%(b,name))
def startMake():
laowang = startEat("laowang")
laowang.__next__()
for index in range(10):
time.sleep(1)
print(" %d "%index)
laowang.send(" %d "%index)
startMake()
실행 결과:더 많은 파 이 썬 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.