> 백엔드 개발 > 파이썬 튜토리얼 > Python 생성기의 재귀 호출 사용법 소개(코드 예)

Python 생성기의 재귀 호출 사용법 소개(코드 예)

不言
풀어 주다: 2018-11-24 16:05:19
앞으로
2637명이 탐색했습니다.

이 글은 Python 생성기의 재귀 호출 사용법을 소개합니다(코드 예제). 필요한 친구가 참고할 수 있기를 바랍니다.

Generator

생성기란 무엇입니까? 함수 본문에 Yield 키워드가 있으면 함수 실행 시 함수 코드가 실행되지 않고 결과가 얻어지는 것이 바로 생성기입니다

생성기는 반복자입니다.

yield의 함수

yield는 반복자 객체를 사용자 정의하는 방법을 제공합니다

yield와 return의 차이점:

1.yield는 여러 값을 반환할 수 있습니다

2.함수는 일시 중지되고 Yield의 이력서는 비용 절감에 도움이 됩니다

함수에 Yield가 표시되는 한 이는 생성기입니다.

예 1: 위에서 언급한 대로 함수에 Yield가 표시되면 생성기이고 생성기는 생성기입니다. 는 반복자입니다.

그런 다음 언급하세요. 반복자에 관해서는 xx.__next__() 값 메서드를 생각해야 합니다

def test():
    print('=====>1')
    yield 1
    print('=====>2')
    yield 2
    print('=====>3')
    yield 3
g = test()  #就相当于一个容器
print(g.__next__())
print(g.__next__())
print(next(g))
로그인 후 복사

작업 결과:

이 값을 얻는 방법을 알고 나면, 동일한 원리를 사용하는 또 다른 간단한 방법은 for Loop

def test():
    print('=====>1')
    yield 1
    print('=====>2')
    yield 2
    print('=====>3')
    yield 3
g = test()
for i in g:
    print(i)
로그인 후 복사

실행 결과:

예 2: test1의 결과는 test2에 의해 호출됩니다. 이를 위해서는 생성기를 Yield로 사용자 정의해야 합니다.

def test1():
    for i in range(10):
        yield i   #把0~9变成生成器返回给函数test1
g = test1()     #g是个生成器
def test2(g):
    for i in g:
        print(i)
test2(g)
로그인 후 복사

실행 결과:

예 3: 로그 오류 모니터

import time
def tail(filepath):   #定义一个查看文件的函数
    with open(filepath, 'rb') as f:   #打开形参为filepath rb是二进制读
        f.seek(0,2)    #把光标移动到末尾
        while True:  #循环监控日志
            data = f.readline()   #读取文件末尾
            if data:   #加入有数据就用yield返回
                yield data
            else:#  否则就睡眠0.05秒
                time.sleep(0.05)
def grep(file, k):    #定义过滤关键字函数
    for i in tail(file):   #循环生成器中的数据
        if k in i.decode('utf-8'):  #因为是用二进制读取方式,所以需要解码显示
            print(i.decode('utf-8'))
grep('a.txt', '500')  #监控a.txt最新日志,并过滤500的错误代码
로그인 후 복사

500이 나타나면 캡처됩니다

Yield의 또 다른 사용법은, 할당

def test(name):
    while True:
        foot = yield
        print('%s正在吃%s' % (name, foot))

e = test('轩轩') #e是生成器
next(e)    #初始化,e.__next__()
# e.send(None)    #初始化,与上一行二选一
e.send('饺子')    #发送值传给foot
e.send('冰激凌')    #发送值传给foot
로그인 후 복사

실행 결과:

재귀 호출

재귀 호출:함수를 호출하는 과정에서 함수 자체가 직접 또는 간접적으로 호출됩니다. 이다 재귀 호출이라고 합니다

재귀는 2단계 준비가 필요합니다: 1 재귀, 2 역추적

예: A, B, C, D, E, 5명이 빵 A를 몇 개 먹는지 알고 싶습니다. 먹었는데 A는 B보다 빵 2개를 더 먹었다고 합니다. C보다 2개를 더 먹었다고 하고, C는 D보다 2개를 더 먹었다고 하고, D는 E보다 2개를 더 먹었다고 하고, E는 안 먹는다고 했고,

그러면 E가 먹지 않았다는 것을 알기 때문에 A, B, C, D의 답을 바탕으로 A가 8을 먹었다는 것을 알 수 있으므로 앞뒤로 가는 과정은 재귀와 역추적

age(A ) = 나이(B) + 2

나이(B) = 나이(C) + 2

나이(C) = 나이(D) + 2

나이(D) = 나이(V) + 2

나이 (V) = 0

def num(n):    
if n == 1:        
return 0    
return num(n-1) + 2res = num(5) 
print(res)
로그인 후 복사

실행 결과:

Python 생성기의 재귀 호출 사용법 소개(코드 예)

위 내용은 Python 생성기의 재귀 호출 사용법 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿