yield와return의 차이

14310 단어 파이썬 베이스

Yield


ield는 생성기 대상을 되돌려줍니다.next () 방법을 통해 결과를 얻을 수 있습니다.
import time


def func():
    start_time = time.time()
    num_list = []
    for i in range(1, 100000000):
        num_list.append(i)
    end_time = time.time()
    cost_time = end_time - start_time
    print(cost_time)
    yield num_list


print(func()) 
func()
next(func())
-------------------------------------------------
<generator object func at 0x00000293CB694138>
8.696713209152222

func () 를 직접 호출하면 결과를 얻을 수 없습니다.next () 방법을 통해 시간을 얻을 수 있습니다.

scrapy의 yield

  • yield 뒤에 리셋 함수.콜백 파라미터를 통해 yield 요청에 리셋 함수를 추가하면 요청이 완료된 후에 리셋 함수에 응답을 매개 변수로 전달합니다.
  • class Douban(scrapy.Spider):
        name = 'douban250'
    
        def start_requests(self):
            urls = ['https://movie.douban.com/top250']
            for url in urls:
                yield scrapy.Request(url, headers=headers,dont_filter=True,callback=self.parse)
    
  • yield 뒤에 scrapy.Item 대상, scrapy 프레임워크는 이 대상을pipelines에 전달합니다.py 진일보 처리
  •     def get_data(self, response):
            result = json.loads(response.text)
            result = dict(result)
            result = result["list"]
            ids = [result[id]["cover"] for id in range(0, len(result))]
            names = [result[id]["name"] for id in range(0, len(result))]
            hero_ids = [result[id]['hero_id'] for id in range(0, len(result))]
            self.item['image_urls'] = ids
            self.item['images'] = names
            yield self.item
    

    Return


    return은 끝 함수를 대표합니다. return 뒤에 있는 코드 블록은 실행하지 않습니다. 이 함수의 실행 결과를 되돌려줍니다.
    import time
    
    
    def func():
        start_time = time.time()
        num_list = []
        for i in range(1, 1000):
            num_list.append(i)
            return num_list
        end_time = time.time()
        cost_time = end_time - start_time
        print(cost_time)
    
    print(func())
    ------------------------------------------------------------------
    [1]
    

    좋은 웹페이지 즐겨찾기