日韩欧乱色一区二区三区在线_久久―日本道色综合久久_欧美日本一区二区_网曝91综合精品门事件在线

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Python代碼中的yield到底是什么?

Python代碼中的yield到底是什么?

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-10-13 11:15:06 1697166906

一、Python代碼中的yield到底是什么

在 Python 中,yield 是一種關(guān)鍵字,它用于定義生成器函數(shù)。生成器函數(shù)與普通函數(shù)相似,它們都可以接受參數(shù)和返回值。不同之處是,生成器函數(shù)在執(zhí)行到 yield 語(yǔ)句時(shí)會(huì)暫停執(zhí)行,并將 yield 后面的表達(dá)式作為返回值返回。當(dāng)生成器再次被調(diào)用時(shí),它會(huì)從暫停的位置繼續(xù)執(zhí)行,直到下一個(gè) yield 語(yǔ)句或函數(shù)結(jié)束。簡(jiǎn)單來(lái)說(shuō),yield 可以將一個(gè)函數(shù)變成一個(gè)可以暫停和恢復(fù)的函數(shù),用于迭代操作。

二、Python介紹

1、簡(jiǎn)介

Python由荷蘭數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究學(xué)會(huì)的吉多·范羅蘇姆于1990年代初設(shè)計(jì),作為一門叫做ABC語(yǔ)言的替代品。Python提供了高效的高級(jí)數(shù)據(jù)結(jié)構(gòu),還能簡(jiǎn)單有效地面向?qū)ο缶幊獭ython語(yǔ)法和動(dòng)態(tài)類型,以及解釋型語(yǔ)言的本質(zhì),使它成為多數(shù)平臺(tái)上寫腳本和快速開(kāi)發(fā)應(yīng)用的編程語(yǔ)言,隨著版本的不斷更新和語(yǔ)言新功能的添加,逐漸被用于獨(dú)立的、大型項(xiàng)目的開(kāi)發(fā)。

Python在各個(gè)編程語(yǔ)言中比較適合新手學(xué)習(xí),Python解釋器易于擴(kuò)展,可以使用C語(yǔ)言或C++(或者其他可以通過(guò)C調(diào)用的語(yǔ)言)擴(kuò)展新的功能和數(shù)據(jù)類型。Python也可用于可定制化軟件中的擴(kuò)展程序語(yǔ)言。Python豐富的標(biāo)準(zhǔn)庫(kù),提供了適用于各個(gè)主要系統(tǒng)平臺(tái)的源碼或機(jī)器碼。

2、發(fā)展歷程

自20世紀(jì)90年代初Python語(yǔ)言誕生至今,它已被逐漸廣泛應(yīng)用于系統(tǒng)管理任務(wù)的處理和Web編程。1995年,Guido van Rossum在弗吉尼亞州的國(guó)家創(chuàng)新研究公司(CNRI)繼續(xù)他在Python上的工作,并在那里發(fā)布了該軟件的多個(gè)版本。2000年五月,Guido van Rossum和Python核心開(kāi)發(fā)團(tuán)隊(duì)轉(zhuǎn)到BeOpen.com并組建了BeOpen PythonLabs團(tuán)隊(duì)。同年十月,BeOpen PythonLabs團(tuán)隊(duì)轉(zhuǎn)到Digital Creations(現(xiàn)為Zope Corporation)。

2001年,Python軟件基金會(huì)(PSF)成立,這是一個(gè)專為擁有Python相關(guān)知識(shí)產(chǎn)權(quán)而創(chuàng)建的非營(yíng)利組織。Zope Corporation是PSF的贊助成員。Python的創(chuàng)始人為荷蘭人吉多·范羅蘇姆(Guido van Rossum)。1989年圣誕節(jié)期間,在阿姆斯特丹,Guido為了打發(fā)圣誕節(jié)的無(wú)趣,決心開(kāi)發(fā)一個(gè)新的腳本解釋程序,作為ABC語(yǔ)言的一種繼承。之所以選中單詞Python(意為大蟒蛇)作為該編程語(yǔ)言的名字,是因?yàn)橛?guó)20世紀(jì)70年代首播的電視喜劇《蒙提·派森的飛行馬戲團(tuán)》(Monty Python’s Flying Circus)。

ABC是由Guido參加設(shè)計(jì)的一種教學(xué)語(yǔ)言。就Guido本人看來(lái),ABC這種語(yǔ)言非常優(yōu)美和強(qiáng)大,是專門為非專業(yè)程序員設(shè)計(jì)的。但是ABC語(yǔ)言并沒(méi)有成功,究其原因,Guido認(rèn)為是其非開(kāi)放造成的。Guido決心在Python中避免這一錯(cuò)誤。同時(shí),他還想實(shí)現(xiàn)在ABC中閃現(xiàn)過(guò)但未曾實(shí)現(xiàn)的東西。就這樣,Python在Guido手中誕生了。可以說(shuō),Python是從ABC發(fā)展起來(lái),主要受到了Modula-3(另一種相當(dāng)優(yōu)美且強(qiáng)大的語(yǔ)言,為小型團(tuán)體所設(shè)計(jì)的)的影響。并且結(jié)合了Unix shell和C的習(xí)慣。

Python已經(jīng)成為較受歡迎的程序設(shè)計(jì)語(yǔ)言之一。自從2004年以后,python的使用率呈線性增長(zhǎng)。Python 2于2000年10月16日發(fā)布,穩(wěn)定版本是Python 2.7。Python 3于2008年12月3日發(fā)布,不完全兼容Python 2。2011年1月,它被TIOBE編程語(yǔ)言排行榜評(píng)為2010年度語(yǔ)言。

由于Python語(yǔ)言的簡(jiǎn)潔性、易讀性以及可擴(kuò)展性,在國(guó)外用Python做科學(xué)計(jì)算的研究機(jī)構(gòu)日益增多,一些知名大學(xué)已經(jīng)采用Python來(lái)教授程序設(shè)計(jì)課程。例如卡耐基梅隆大學(xué)的編程基礎(chǔ)、麻省理工學(xué)院的計(jì)算機(jī)科學(xué)及編程導(dǎo)論就使用Python語(yǔ)言講授。眾多開(kāi)源的科學(xué)計(jì)算軟件包都提供了Python的調(diào)用接口,例如知名的計(jì)算機(jī)視覺(jué)庫(kù)OpenCV、三維可視化庫(kù)VTK、醫(yī)學(xué)圖像處理庫(kù)ITK。而Python專用的科學(xué)計(jì)算擴(kuò)展庫(kù)就更多了,例如如下3個(gè)十分經(jīng)典的科學(xué)計(jì)算擴(kuò)展庫(kù):NumPy、SciPy和matplotlib,它們分別為Python提供了快速數(shù)組處理、數(shù)值運(yùn)算以及繪圖功能。因此Python語(yǔ)言及其眾多的擴(kuò)展庫(kù)所構(gòu)成的開(kāi)發(fā)環(huán)境十分適合工程技術(shù)、科研人員處理實(shí)驗(yàn)數(shù)據(jù)、制作圖表,甚至開(kāi)發(fā)科學(xué)計(jì)算應(yīng)用程序。2018年3月,該語(yǔ)言作者在郵件列表上宣布Python 2.7將于2020年1月1日終止支持。用戶如果想要在這個(gè)日期之后繼續(xù)得到與Python 2.7有關(guān)的支持,則需要付費(fèi)給商業(yè)供應(yīng)商。

3、優(yōu)點(diǎn)

簡(jiǎn)單:Python是一種代表簡(jiǎn)單主義思想的語(yǔ)言。閱讀一個(gè)良好的Python程序就感覺(jué)像是在讀英語(yǔ)一樣。它使你能夠?qū)W⒂诮鉀Q問(wèn)題而不是去搞明白語(yǔ)言本身。易學(xué):Python極其容易上手,因?yàn)镻ython有極其簡(jiǎn)單的說(shuō)明文檔。易讀、易維護(hù):風(fēng)格清晰劃一、強(qiáng)制縮進(jìn)。速度較快:Python的底層是用C語(yǔ)言寫的,很多標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)也都是用C寫的,運(yùn)行速度非常快。免費(fèi)、開(kāi)源:Python是FLOSS(自由/開(kāi)放源碼軟件)之一。使用者可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中。FLOSS是基于一個(gè)團(tuán)體分享知識(shí)的概念。高層語(yǔ)言:用Python語(yǔ)言編寫程序的時(shí)候無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)。可移植性:由于它的開(kāi)源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工作在不同平臺(tái)上)。這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux開(kāi)發(fā)的android平臺(tái)。解釋性:一個(gè)用編譯性語(yǔ)言比如C或C++寫的程序可以從源文件(即C或C++語(yǔ)言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語(yǔ)言(二進(jìn)制代碼,即0和1)。這個(gè)過(guò)程通過(guò)編譯器和不同的標(biāo)記、選項(xiàng)完成。運(yùn)行程序的時(shí)候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運(yùn)行。而Python語(yǔ)言寫的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼運(yùn)行程序。在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言并運(yùn)行。這使得使用Python更加簡(jiǎn)單。也使得Python程序更加易于移植。面向?qū)ο?/strong>:Python既支持面向過(guò)程的編程也支持面向?qū)ο蟮木幊獭T凇懊嫦蜻^(guò)程”的語(yǔ)言中,程序是由過(guò)程或僅僅是可重用代碼的函數(shù)構(gòu)建起來(lái)的。在“面向?qū)ο蟆钡恼Z(yǔ)言中,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來(lái)的。Python是完全面向?qū)ο蟮恼Z(yǔ)言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符和動(dòng)態(tài)類型。相對(duì)于Lisp這種傳統(tǒng)的函數(shù)式編程語(yǔ)言,Python對(duì)函數(shù)式設(shè)計(jì)只提供了有限的支持。有兩個(gè)標(biāo)準(zhǔn)庫(kù)(functools,itertools)提供了Haskell和Standard ML中久經(jīng)考驗(yàn)的函數(shù)式程序設(shè)計(jì)工具。可擴(kuò)展性、可擴(kuò)充性:如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開(kāi),可以部分程序用C或C++編寫,然后在Python程序中使用它們。Python本身被設(shè)計(jì)為可擴(kuò)充的。并非所有的特性和功能都集成到語(yǔ)言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語(yǔ)言、C++、Cython來(lái)編寫擴(kuò)充模塊。Python編譯器本身也可以被集成到其它需要腳本語(yǔ)言的程序內(nèi)。因此,很多人還把Python作為一種“膠水語(yǔ)言”(glue language)使用。使用Python將其他語(yǔ)言編寫的程序進(jìn)行集成和封裝。在Google內(nèi)部的很多項(xiàng)目,例如Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊。《Python技術(shù)手冊(cè)》的作者馬特利(Alex Martelli)說(shuō):“這很難講,不過(guò),2004年,Python已在Google內(nèi)部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,他們的目的是 Python where we can,C++ where we must,在操控硬件的場(chǎng)合使用C++,在快速開(kāi)發(fā)時(shí)候使用Python。”可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。豐富的庫(kù):Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。它可以幫助處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫(kù)以外,還有許多其他高質(zhì)量的庫(kù),如wxPython、Twisted和Python圖像庫(kù)等等。規(guī)范的代碼:Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有較好可讀性。而Python語(yǔ)言寫的程序不需要編譯成二進(jìn)制代碼。Python的作者設(shè)計(jì)限制性很強(qiáng)的語(yǔ)法,使得不好的編程習(xí)慣(例如if語(yǔ)句的下一行不向右縮進(jìn))都不能通過(guò)編譯。其中很重要的一項(xiàng)就是Python的縮進(jìn)規(guī)則。一個(gè)和其他大多數(shù)語(yǔ)言(如C)的區(qū)別就是,一個(gè)模塊的界限,完全是由每行的首字符在這一行的位置來(lái)決定(而C語(yǔ)言是用一對(duì)大括號(hào)來(lái)明確的定出模塊的邊界,與字符的位置毫無(wú)關(guān)系)。通過(guò)強(qiáng)制程序員們縮進(jìn)(包括if,for和函數(shù)定義等所有需要使用模塊的地方),Python確實(shí)使得程序更加清晰和美觀。高級(jí)動(dòng)態(tài)編程:雖然Python可能被粗略地分類為“腳本語(yǔ)言”(script language),但實(shí)際上一些大規(guī)模軟件開(kāi)發(fā)計(jì)劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級(jí)動(dòng)態(tài)編程語(yǔ)言,原因是“腳本語(yǔ)言”泛指僅作簡(jiǎn)單程序設(shè)計(jì)任務(wù)的語(yǔ)言,如shellscript、VBScript等只能處理簡(jiǎn)單任務(wù)的編程語(yǔ)言,并不能與Python相提并論。做科學(xué)計(jì)算優(yōu)點(diǎn)多:說(shuō)起科學(xué)計(jì)算,首先會(huì)被提到的可能是MATLAB。除了MATLAB的一些專業(yè)性很強(qiáng)的工具箱還無(wú)法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴(kuò)展庫(kù)。

4、缺點(diǎn)

單行語(yǔ)句和命令行輸出問(wèn)題:很多時(shí)候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無(wú)此限制,可以較為方便的在shell下完成簡(jiǎn)單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€(gè).py文件。給初學(xué)者帶來(lái)困惑:獨(dú)特的語(yǔ)法這也許不應(yīng)該被稱為局限,但是它用縮進(jìn)來(lái)區(qū)分語(yǔ)句關(guān)系的方式還是給很多初學(xué)者帶來(lái)了困惑。即便是很有經(jīng)驗(yàn)的Python程序員,也可能陷入陷阱當(dāng)中。運(yùn)行速度慢:這里是指與C和C++相比。Python開(kāi)發(fā)人員盡量避開(kāi)不成熟或者不重要的優(yōu)化。一些針對(duì)非重要部位的加快運(yùn)行速度的補(bǔ)丁通常不會(huì)被合并到Python內(nèi)。所以很多人認(rèn)為Python很慢。不過(guò),根據(jù)二八定律,大多數(shù)程序?qū)λ俣纫蟛桓摺T谀承?duì)運(yùn)行速度要求很高的情況,Python設(shè)計(jì)師傾向于使用JIT技術(shù),或者用使用C/C++語(yǔ)言改寫這部分程序。可用的JIT技術(shù)是PyPy。

延伸閱讀1:python標(biāo)準(zhǔn)庫(kù)

Python擁有一個(gè)強(qiáng)大的標(biāo)準(zhǔn)庫(kù)。Python語(yǔ)言的核心只包含數(shù)字、字符串、列表、字典、文件等常見(jiàn)類型和函數(shù),而由Python標(biāo)準(zhǔn)庫(kù)提供了系統(tǒng)管理、網(wǎng)絡(luò)通信、文本處理、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)、XML處理等額外的功能。Python標(biāo)準(zhǔn)庫(kù)命名接口清晰、文檔良好,很容易學(xué)習(xí)和使用。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
Python爬蟲(chóng)是什么?

一、爬蟲(chóng)的基本原理Python爬蟲(chóng)的基本原理是通過(guò)發(fā)送HTTP請(qǐng)求獲取網(wǎng)頁(yè)的內(nèi)容,然后解析網(wǎng)頁(yè)的結(jié)構(gòu),提取出所需的數(shù)據(jù)。它使用HTTP庫(kù)向目標(biāo)網(wǎng)站發(fā)...詳情>>

2023-10-13 12:34:56
關(guān)系型數(shù)據(jù)庫(kù)的本質(zhì)是什么,mongodb為什么不是關(guān)系型數(shù)據(jù)庫(kù)?

一、關(guān)系型數(shù)據(jù)庫(kù)的本質(zhì)是什么,mongodb不是關(guān)系型數(shù)據(jù)庫(kù)的原因關(guān)系型數(shù)據(jù)庫(kù)的本質(zhì)是“relation”。這里中文翻譯成“關(guān)系”有點(diǎn)籠統(tǒng),因?yàn)檫€有...詳情>>

2023-10-13 12:28:32
ORACLE里面LOBINDEX,LOBSEGMENT類型的是什么對(duì)象?

一、ORACLE里面LOBINDEX,LOBSEGMENT類型的是什么對(duì)象建立含有l(wèi)ob字段的表時(shí),oracle會(huì)自動(dòng)為lob字段建立兩個(gè)單獨(dú)的segment,一個(gè)用來(lái)存放數(shù)據(jù),...詳情>>

2023-10-13 12:19:56
Lucene/ ElasticSearch這類的搜索引擎和SQL數(shù)據(jù)庫(kù)里的查詢/全文檢索有什么區(qū)別?

一、Lucene/ ElasticSearch這類的搜索引擎和SQL數(shù)據(jù)庫(kù)里的查詢/全文檢索的區(qū)別es也可以理解成是一種數(shù)據(jù)庫(kù),不僅能提供全文檢索功能,還可以支...詳情>>

2023-10-13 12:17:32
mysql的innodb通過(guò)nextkey lock解決了幻讀,為什么還說(shuō)默認(rèn)隔離級(jí)別是可重復(fù)讀?

一、解決了幻讀,為什么還說(shuō)默認(rèn)隔離級(jí)別是可重復(fù)讀MySQL的可重復(fù)讀隔離級(jí)別下是有“bug”的Snapshot Isolation,可以避免非write skew style的...詳情>>

2023-10-13 12:09:00
快速通道
主站蜘蛛池模板: 新建县| 英德市| 合作市| 平武县| 平邑县| 杂多县| 临西县| 吉隆县| 合肥市| 吴江市| 丘北县| 阳新县| 尉氏县| 阿拉善右旗| 门头沟区| 晋江市| 天峨县| 吉首市| 西贡区| 定安县| 牡丹江市| 红河县| 蒙阴县| 岑巩县| 谢通门县| 镇原县| 盖州市| 安达市| 澄迈县| 夏河县| 平昌县| 塔城市| 延寿县| 海盐县| 报价| 泽州县| 金溪县| 渭源县| 瓦房店市| 双牌县| 华池县|