欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中yield返回生成器的詳細(xì)方法

 更新時(shí)間:2021年11月03日 15:54:50   作者:python學(xué)習(xí)者0  
這篇文章主要介紹了Python中的yield返回生成器,生成器是Python編程進(jìn)階中的重要知識(shí)點(diǎn),需要的朋友可以參考下,希望能夠給你帶來幫助

最簡單、直觀的認(rèn)識(shí),將 yield 看做 return 對(duì)待,只是 return 返回一個(gè)值,而 yield 返回一個(gè)生成器。

要理解 yield 的作用,必須理解生成器是什么?

在理解生成器之前,必須先理解迭代器。

一、迭代器

逐項(xiàng)讀取列表,稱為迭代。

mylist = [1, 2, 3]
for i in mylist: # 可迭代對(duì)象
    print(i)

列表解析式同樣是一個(gè)迭代器。

mylist = [x*x for x in range(3)]
for i in mylist:
    print(i)
'''
0
1
4
'''

所有 for...in... 都是迭代器,包括列表、字符串、文件等等。

但是,迭代器所有的值都存儲(chǔ)在內(nèi)存中,十分浪費(fèi)內(nèi)存。

因此有了生成器的概念。

二、生成器

生成器是一種迭代器,這種迭代器只能迭代一次。

生成器不會(huì)一次性存儲(chǔ)所有的值,而是會(huì)動(dòng)態(tài)的生成值。

mygenerator = (x*x for x in range(3))
for i in mygenerator:
    print(i)

生成器只可執(zhí)行一次,再次執(zhí)行時(shí)不會(huì)輸出任何東西。

三、yield

1.例子一

yield 類似于 return 關(guān)鍵字,只是函數(shù)將返回一個(gè)生成器。

# 創(chuàng)建生成器
def createGenerator():
    mylist = range(10)
    for i in mylist:
        print(i) # 驗(yàn)證函數(shù)調(diào)用時(shí)并無執(zhí)行
        yield i*i
mygenerator = createGenerator()    
print(mygenerator) 
# <generator object createGenerator at 0x0000029E88FDCA50>
# 使用生成器
for i in mygenerator:
    print(i)
# 再次執(zhí)行 返回為空 沒有值了

函數(shù)將返回一組只需要讀取一次的值,可以大大的提升代碼性能。

在調(diào)用函數(shù)時(shí),函數(shù)體中的代碼并不會(huì)執(zhí)行,函數(shù)只返回生成器對(duì)象。

代碼每次從使用生成器時(shí)停止的地方繼續(xù)。

2.例子二

#Python學(xué)習(xí)交流群:531509025
# 學(xué)習(xí)另外一個(gè)例子
def foo():
    print("starting...")
    while True:
        res = yield 4 # 函數(shù)并不真正執(zhí)行
        print("res:", res)
g = foo() # 得到一個(gè)生成器對(duì)象
print(next(g)) # 真正執(zhí)行
print("*"*20)
print(next(g)) # 從上一次停止的地方繼續(xù)執(zhí)行
'''
starting...
4
********************
res: None
4
'''
print(g.send(7))

執(zhí)行 yield 之后,才會(huì)跳出 while 循環(huán)。

next 函數(shù)用于執(zhí)行下一步操作。

send 函數(shù)用于發(fā)送一個(gè)參數(shù)給生成器。且 send 方法中包含 next 方法。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 解決使用pip安裝報(bào)錯(cuò):Microsoft?Visual?C++?14.0?is?required.

    解決使用pip安裝報(bào)錯(cuò):Microsoft?Visual?C++?14.0?is?required.

    對(duì)于程序員來說,經(jīng)常pip安裝自己所需要的包,大部分的包基本都能安裝,但是總會(huì)遇到包安裝不了的問題,下面這篇文章主要給大家介紹了關(guān)于如何解決使用pip安裝報(bào)錯(cuò):Microsoft?Visual?C++?14.0?is?required.的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Python的高級(jí)Git庫 Gittle

    Python的高級(jí)Git庫 Gittle

    Gittle是一個(gè)高級(jí)純python git 庫。構(gòu)建在dulwich之上,提供了大部分的低層機(jī)制
    2014-09-09
  • Python基于回溯法子集樹模板解決馬踏棋盤問題示例

    Python基于回溯法子集樹模板解決馬踏棋盤問題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決馬踏棋盤問題,簡單描述了國際象棋馬踏棋盤問題,并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹模板解決馬踏棋盤問題的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • python Gunicorn服務(wù)器使用方法詳解

    python Gunicorn服務(wù)器使用方法詳解

    這篇文章主要介紹了python Gunicorn服務(wù)器使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python入門教程(三十二)Python的命令行輸入

    Python入門教程(三十二)Python的命令行輸入

    這篇文章主要介紹了Python入門教程(三十二)Python的命令行輸入,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-05-05
  • python模仿網(wǎng)頁版微信發(fā)送消息功能

    python模仿網(wǎng)頁版微信發(fā)送消息功能

    這篇文章主要介紹了python模仿網(wǎng)頁版微信發(fā)送消息功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 淺談機(jī)器學(xué)習(xí)需要的了解的十大算法

    淺談機(jī)器學(xué)習(xí)需要的了解的十大算法

    這篇文章主要介紹了淺談機(jī)器學(xué)習(xí)需要的了解的十大算法,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 使用python PIL庫批量對(duì)圖片添加水印的過程詳解

    使用python PIL庫批量對(duì)圖片添加水印的過程詳解

    平常我們想給某些圖片添加文字水印,方法有很多,也有很多的工具可以方便的進(jìn)行,今天主要是對(duì)PIL庫的應(yīng)用,結(jié)合Python語言批量對(duì)圖片添加水印,文章通過代碼示例給大家介紹的非常詳細(xì),感興趣的同學(xué)可以參考一下
    2023-11-11
  • python學(xué)生管理系統(tǒng)

    python學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python學(xué)生管理系統(tǒng)的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python多線程與多進(jìn)程及其區(qū)別詳解

    python多線程與多進(jìn)程及其區(qū)別詳解

    這篇文章主要介紹了python多線程與多進(jìn)程及其區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論