HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    python文章生成器(python 文章生成器)

    發(fā)布時(shí)間:2023-04-16 09:53:06     稿源: 創(chuàng)意嶺    閱讀: 68        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于python文章生成器的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來(lái)看看吧。

    開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    本文目錄:

    python文章生成器(python 文章生成器)

    如何更好地理解Python迭代器和生成器

    Python這門語(yǔ)言中,生成器毫無(wú)疑問是最有用的特性之一。與此同時(shí),也是使用的最不廣泛的Python特
    性之一。究其原因,主要是因?yàn)?,在其他主流語(yǔ)言里面沒有生成器的概念。正是由于生成器是一
    個(gè)“新”的東西,所以,它一方面沒有引起廣大工程師的重視,另一方面,也增加了工程師的學(xué)習(xí)成本,
    最終導(dǎo)致大家錯(cuò)過了Python中如此有用的一個(gè)特性。
    我的這篇文章,希望通過簡(jiǎn)單易懂的方式,深入淺出地介紹Python的生成器,以改變“如此有用的特性卻
    使用極不廣泛”的現(xiàn)象。本文的組織如下:在第1章,我們簡(jiǎn)單地介紹了Python中的迭代器協(xié)議;在本文
    第2章,將會(huì)詳細(xì)介紹生成器的概念和語(yǔ)法;在第3章,將會(huì)給出一個(gè)有用的例子,說明使用生成器的好
    處;在本文最后,簡(jiǎn)單的討論了使用生成器的注意事項(xiàng)。
    1. 迭代器協(xié)議
    由于生成器自動(dòng)實(shí)現(xiàn)了迭代器協(xié)議,而迭代器協(xié)議對(duì)很多人來(lái)說,也是一個(gè)較為抽象的概念。所以,為了
    更好的理解生成器,我們需要簡(jiǎn)單的回顧一下迭代器協(xié)議的概念。
    1. 迭代器協(xié)議是指:對(duì)象需要提供next方法,它要么返回迭代中的下一項(xiàng),要么就引起一個(gè)
    StopIteration異常,以終止迭代
    2. 可迭代對(duì)象就是:實(shí)現(xiàn)了迭代器協(xié)議的對(duì)象
    3. 協(xié)議是一種約定,可迭代對(duì)象實(shí)現(xiàn)迭代器協(xié)議,Python的內(nèi)置工具(如for循環(huán),sum,min,max函
    數(shù)等)使用迭代器協(xié)議訪問對(duì)象。
    舉個(gè)例子:在所有語(yǔ)言中,我們都可以使用for循環(huán)來(lái)遍歷數(shù)組,Python的list底層實(shí)現(xiàn)是一個(gè)數(shù)組,所
    以,我們可以使用for循環(huán)來(lái)遍歷list。如下所示:
    >>> for n in [1, 2, 3, 4]:
    ... print n
    但是,對(duì)Python稍微熟悉一點(diǎn)的朋友應(yīng)該知道,Python的for循環(huán)不但可以用來(lái)遍歷list,還可以用來(lái)遍歷
    文件對(duì)象,如下所示:
    >>> with open(‘/etc/passwd’) as f: # 文件對(duì)象提供迭代器協(xié)議
    ... for line in f: # for循環(huán)使用迭代器協(xié)議訪問文件
    ... print line
    ...
    為什么在Python中,文件還可以使用for循環(huán)進(jìn)行遍歷呢?這是因?yàn)?,在Python中,文件對(duì)象實(shí)現(xiàn)了迭代
    器協(xié)議,for循環(huán)并不知道它遍歷的是一個(gè)文件對(duì)象,它只管使用迭代器協(xié)議訪問對(duì)象即可。正是由于
    Python的文件對(duì)象實(shí)現(xiàn)了迭代器協(xié)議,我們才得以使用如此方便的方式訪問文件,如下所示:
    >>> f = open('/etc/passwd')
    >>> dir(f)
    ['__class__', '__enter__', '__exit__', '__iter__', '__new__', 'writelines', '...'
    2. 生成器
    Python使用生成器對(duì)延遲操作提供了支持。所謂延遲操作,是指在需要的時(shí)候才產(chǎn)生結(jié)果,而不是立即產(chǎn)
    生結(jié)果。這也是生成器的主要好處。
    Python有兩種不同的方式提供生成器:
    2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
    https://www.zhihu.com/question/20829330 2/5
    1. 生成器函數(shù):常規(guī)函數(shù)定義,但是,使用yield語(yǔ)句而不是return語(yǔ)句返回結(jié)果。yield語(yǔ)句一次返回一
    個(gè)結(jié)果,在每個(gè)結(jié)果中間,掛起函數(shù)的狀態(tài),以便下次重它離開的地方繼續(xù)執(zhí)行
    2. 生成器表達(dá)式:類似于列表推導(dǎo),但是,生成器返回按需產(chǎn)生結(jié)果的一個(gè)對(duì)象,而不是一次構(gòu)建一個(gè)
    結(jié)果列表
    2.1 生成器函數(shù)
    我們來(lái)看一個(gè)例子,使用生成器返回自然數(shù)的平方(注意返回的是多個(gè)值):
    def gensquares(N):
    for i in range(N):
    yield i ** 2
    for item in gensquares(5):
    print item,
    使用普通函數(shù):
    def gensquares(N):
    res = []
    for i in range(N):
    res.append(i*i)
    return res
    for item in gensquares(5):
    print item,
    可以看到,使用生成器函數(shù)代碼量更少。
    2.2 生成器表達(dá)式
    使用列表推導(dǎo),將會(huì)一次產(chǎn)生所有結(jié)果:
    >>> squares = [x**2 for x in range(5)]
    >>> squares
    [0, 1, 4, 9, 16]
    將列表推導(dǎo)的中括號(hào),替換成圓括號(hào),就是一個(gè)生成器表達(dá)式:
    >>> squares = (x**2 for x in range(5))
    >>> squares>>> next(squares)
    0
    >>> next(squares)
    1
    >>> next(squares)
    4
    >>> list(squares)
    [9, 16]
    Python不但使用迭代器協(xié)議,讓for循環(huán)變得更加通用。大部分內(nèi)置函數(shù),也是使用迭代器協(xié)議訪問對(duì)象
    的。例如, sum函數(shù)是Python的內(nèi)置函數(shù),該函數(shù)使用迭代器協(xié)議訪問對(duì)象,而生成器實(shí)現(xiàn)了迭代器協(xié)
    2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
    https://www.zhihu.com/question/20829330 3/5
    議,所以,我們可以直接這樣計(jì)算一系列值的和:
    >>> sum(x ** 2 for x in xrange(4))
    而不用多此一舉的先構(gòu)造一個(gè)列表:
    >>> sum([x ** 2 for x in xrange(4)])
    2.3 再看生成器
    前面已經(jīng)對(duì)生成器有了感性的認(rèn)識(shí),我們以生成器函數(shù)為例,再來(lái)深入探討一下Python的生成器:
    1. 語(yǔ)法上和函數(shù)類似:生成器函數(shù)和常規(guī)函數(shù)幾乎是一樣的。它們都是使用def語(yǔ)句進(jìn)行定義,差別在
    于,生成器使用yield語(yǔ)句返回一個(gè)值,而常規(guī)函數(shù)使用return語(yǔ)句返回一個(gè)值
    2. 自動(dòng)實(shí)現(xiàn)迭代器協(xié)議:對(duì)于生成器,Python會(huì)自動(dòng)實(shí)現(xiàn)迭代器協(xié)議,以便應(yīng)用到迭代背景中(如for
    循環(huán),sum函數(shù))。由于生成器自動(dòng)實(shí)現(xiàn)了迭代器協(xié)議,所以,我們可以調(diào)用它的next方法,并且,
    在沒有值可以返回的時(shí)候,生成器自動(dòng)產(chǎn)生StopIteration異常
    3. 狀態(tài)掛起:生成器使用yield語(yǔ)句返回一個(gè)值。yield語(yǔ)句掛起該生成器函數(shù)的狀態(tài),保留足夠的信息,
    以便之后從它離開的地方繼續(xù)執(zhí)行
    3. 示例
    我們?cè)賮?lái)看兩個(gè)生成器的例子,以便大家更好的理解生成器的作用。
    首先,生成器的好處是延遲計(jì)算,一次返回一個(gè)結(jié)果。也就是說,它不會(huì)一次生成所有的結(jié)果,這對(duì)于大
    數(shù)據(jù)量處理,將會(huì)非常有用。
    大家可以在自己電腦上試試下面兩個(gè)表達(dá)式,并且觀察內(nèi)存占用情況。對(duì)于前一個(gè)表達(dá)式,我在自己的電
    腦上進(jìn)行測(cè)試,還沒有看到最終結(jié)果電腦就已經(jīng)卡死,對(duì)于后一個(gè)表達(dá)式,幾乎沒有什么內(nèi)存占用。
    sum([i for i in xrange(10000000000)])
    sum(i for i in xrange(10000000000))
    除了延遲計(jì)算,生成器還能有效提高代碼可讀性。例如,現(xiàn)在有一個(gè)需求,求一段文字中,每個(gè)單詞出現(xiàn)
    的位置。
    不使用生成器的情況:
    def index_words(text):
    result = []
    if text:
    result.append(0)
    for index, letter in enumerate(text, 1):
    if letter == ' ':
    result.append(index)
    return result
    使用生成器的情況:
    2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
    https://www.zhihu.com/question/20829330 4/5
    def index_words(text):
    if text:
    yield 0
    for index, letter in enumerate(text, 1):
    if letter == ' ':
    yield index
    這里,至少有兩個(gè)充分的理由說明 ,使用生成器比不使用生成器代碼更加清晰:
    1. 使用生成器以后,代碼行數(shù)更少。大家要記住,如果想把代碼寫的Pythonic,在保證代碼可讀性的前
    提下,代碼行數(shù)越少越好
    2. 不使用生成器的時(shí)候,對(duì)于每次結(jié)果,我們首先看到的是result.append(index),其次,才是index。
    也就是說,我們每次看到的是一個(gè)列表的append操作,只是append的是我們想要的結(jié)果。使用生成
    器的時(shí)候,直接yield index,少了列表append操作的干擾,我們一眼就能夠看出,代碼是要返回
    index。
    這個(gè)例子充分說明了,合理使用生成器,能夠有效提高代碼可讀性。只要大家完全接受了生成器的概念,
    理解了yield語(yǔ)句和return語(yǔ)句一樣,也是返回一個(gè)值。那么,就能夠理解為什么使用生成器比不使用生成
    器要好,能夠理解使用生成器真的可以讓代碼變得清晰易懂。
    4. 使用生成器的注意事項(xiàng)
    相信通過這篇文章,大家已經(jīng)能夠理解生成器的作用和好處。但是,還沒有結(jié)束,使用生成器,也有一點(diǎn)
    注意事項(xiàng)。
    我們直接來(lái)看例子,假設(shè)文件中保存了每個(gè)省份的人口總數(shù),現(xiàn)在,需要求每個(gè)省份的人口占全國(guó)總?cè)丝?br/>的比例。顯然,我們需要先求出全國(guó)的總?cè)丝冢缓笤诒闅v每個(gè)省份的人口,用每個(gè)省的人口數(shù)除以總?cè)?br/>口數(shù),就得到了每個(gè)省份的人口占全國(guó)人口的比例。
    如下所示:
    def get_province_population(filename):
    with open(filename) as f:
    for line in f:
    yield int(line)
    gen = get_province_population('data.txt')
    all_population = sum(gen)
    #print all_population
    for population in gen:
    print population / all_population
    執(zhí)行上面這段代碼,將不會(huì)有任何輸出,這是因?yàn)椋善髦荒鼙闅v一次。在我們執(zhí)行sum語(yǔ)句的時(shí)候,
    就遍歷了我們的生成器,當(dāng)我們?cè)俅伪闅v我們的生成器的時(shí)候,將不會(huì)有任何記錄。所以,上面的代碼不
    會(huì)有任何輸出。
    因此,生成器的唯一注意事項(xiàng)就是:生成器只能遍歷一次。
    5. 總結(jié)
    2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
    https://www.zhihu.com/question/20829330 5/5
    本文深入淺出地介紹了Python中,一個(gè)容易被大家忽略的重要特性,即Python的生成器。為了講解生成
    器,本文先介紹了迭代器協(xié)議,然后介紹了生成器函數(shù)和生成器表達(dá)式,并通過示例演示了生成器的優(yōu)點(diǎn)
    和注意事項(xiàng)。在實(shí)際工作中,充分利用Python生成器,不但能夠減少內(nèi)存使用,還能夠提高代碼可讀性。
    掌握生成器也是Python高手的標(biāo)配。希望本文能夠幫助大家理解Python的生成器

    如何編寫Python文檔生成器

    一、啟動(dòng)“自動(dòng)編寫摘要”功能
    Word 97/2000/XP/2003均支持此項(xiàng)功能,用Word打開需要編輯的論文后,在“工具”菜單選擇“自動(dòng)編寫摘要”即可彈出對(duì)話框。如果安裝的不是Word的完整版,系統(tǒng)會(huì)提示放入Office的安裝盤進(jìn)行此功能項(xiàng)的安裝。
    二、功能設(shè)置簡(jiǎn)介
    Word本身提供了四種不同類型的摘要可供選擇。下面分別說明:
    1.突出顯示要點(diǎn):選擇該項(xiàng)的話,Word將對(duì)論文進(jìn)行分析摘錄,將其中的中心句和關(guān)鍵詞語(yǔ)用反白形式在原文檔中突出顯示。
    特點(diǎn):簡(jiǎn)明扼要,突出重點(diǎn)。
    2.在文檔頂端插入摘要或摘錄文字:由Word自動(dòng)摘錄論文要點(diǎn),并將摘要自動(dòng)放置于論文之前,正文部分保持不變。
    特點(diǎn):大部分論文都采用了這種格式,當(dāng)然也要選擇此項(xiàng)了。
    3.新建一篇文檔并將摘要置于其中:用摘錄的關(guān)鍵詞句自動(dòng)生成一篇新文檔。
    特點(diǎn):原文檔無(wú)任何形式的改變。
    4.在不退出原文檔的情況下隱藏除摘要以外的其它內(nèi)容:將Word搜索到的關(guān)鍵語(yǔ)句和重點(diǎn)詞語(yǔ)單獨(dú)留下,自動(dòng)隱藏文檔中其它內(nèi)容。
    特點(diǎn):更適合閱讀長(zhǎng)篇文檔,文章的主要觀點(diǎn)一目了然。
    三、細(xì)節(jié)設(shè)置
    在論文摘要類型完成之后,就需要對(duì)論文摘要的細(xì)節(jié)進(jìn)行調(diào)整了。
    在“摘要長(zhǎng)度”的選項(xiàng)中可以設(shè)置論文摘要的長(zhǎng)短;單擊下拉箭頭有三種選擇:按句數(shù)、字?jǐn)?shù)和所占的比例。
    小貼士:如果論文的每一個(gè)點(diǎn)比較集中,摘要文字在文中各段中分布較均勻,百分比可以取小些,如5%左右。如果比較分散,值可以取大些,如15%。
    四、摘要的修改
    如果你選擇的是第一種摘要,經(jīng)過上述設(shè)置,你感覺摘要還不直觀,還可以在彈出的“自動(dòng)編寫摘要”的懸浮框上,直接調(diào)節(jié)左/右小箭頭來(lái)逐漸減小/增大摘要的比例大??;而且同時(shí)你還可以通過單擊最左邊的圖標(biāo)在“突出顯示”和“只顯示摘要”的效果切換中進(jìn)行查看,這是不是很直觀??!設(shè)置完成后,單擊“確定”退出即可。

    以上就是關(guān)于python文章生成器相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    python搜索框推薦詞(python 搜索引擎)

    happybirthday花體粘貼復(fù)制(happybirthdaytome花體可復(fù)制)

    happynewyear兔年花體字(happy newyear花體)

    廣告公司全案策劃(廣告公司全案策劃案例)

    五個(gè)關(guān)于短視頻的推廣方法