파이썬 학습의 길 (고급 특성의 생성기generator)

2532 단어

고급 기능의 생성기


앞에서 우리는 고급 특성의 목록 생성식을 배웠는데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!

좋은 웹페이지 즐겨찾기