파이썬 학습의 길 (고급 특성의 생성기generator)
고급 기능의 생성기
앞에서 우리는 고급 특성의 목록 생성식을 배웠는데list[]하지만list 데이터량이 너무 많으면 메모리에서 많은 공간을 차지하는 것은 좋지 않은 현상이다. 현재 우리는 생성기 즉tuple용()으로 포장하고 []로 되돌아오지 않는 대상은 생성기generator(교체 가능한 대상)이다. 데이터를 찾으려면next(인덱스)만 사용해야 한다.
# :
g = (x * x for x in range(11))
print(g) # generator
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
L1 = [ x for i, x in enumerate(g) if i<5] # generator [0, 1, 4, 9, 16]
print(L1)
L2 = [ str(i)+'='+str(x) for i, x in enumerate(g) if i<5] # generator ['0=0', '1=1', '2=4', '3=9', '4=16']
print(L2)
연습하다
(Fibonacci), , :
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b # generator
a, b = b, a + b
n += 1
return 'done'
print(fib(6))
print([x for x in fib(12)])
generator와 함수의 실행 절차는 다르다.함수는 순서대로 실행되며,return 문장이나 마지막 줄의 함수 문장을 만나면 되돌아옵니다.generator로 변하는 함수는next () 를 호출할 때마다 실행되며, yield 문장이 되돌아오고, 다시 실행할 때 지난번에 되돌아온 yield 문장에서 계속 실행됩니다.
def odd():
print('step 1')
yield 1
print('step 2')
yield 2
print('step 3')
yield 3
o = odd()
print(next(o))
print(next(o))
print(next(o))
# odd()
양휘 삼각형의 정의는 다음과 같다.python은 양휘 삼각형의 원리를 실현한다.
def yh():
L = [1]
while True:
yield L
L.append(0)
L = [L[i - 1] + L[i] for i in range(len(L))]
n = 0
results = []
for t in yh():
results.append(t)
n = n + 1
print(t) #
if n == 10:
break
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]
# [1, 5, 10, 10, 5, 1]
# [1, 6, 15, 20, 15, 6, 1]
# [1, 7, 21, 35, 35, 21, 7, 1]
# [1, 8, 28, 56, 70, 56, 28, 8, 1]
# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
요약:
generator는 매우 강력한 도구로 파이톤에서 목록 생성식을generator로 간단하게 바꿀 수도 있고 함수를 통해 복잡한 논리를 실현하는generator로 바꿀 수도 있다.
generator의 작업 원리를 이해하려면 for 순환 과정에서 다음 원소를 끊임없이 계산하고 적당한 조건에서 for 순환을 끝내야 한다.함수가 바뀐generator에 대해 말하자면return문장을 만나거나 함수체의 마지막 줄에 실행되는 문장을 만나면generator의 명령을 끝내고 for순환이 끝난다.
일반 함수와 일반 함수를 구분하고 일반 함수 호출은 결과를 직접 되돌려줍니다.
# >>> r = abs(6)
# >>> r
# 6
# generator “ ” generator :
# >>> g = fib(6)
# >>> g
#
관심 파도!한파 좋아!저는 전단 풋내기입니다. 자신의 개인 블로그인 덩펑의 블로그를 하고 있습니다. 교류 학습을 환영합니다. 사용하는 기술vue+koa2+mysql+php+nginx!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.