Python代碼中的yield到底是什么?
一、Python代碼中的yield到底是什么
在 Python 中,yield 是一種關鍵字,它用于定義生成器函數。生成器函數與普通函數相似,它們都可以接受參數和返回值。不同之處是,生成器函數在執行到 yield 語句時會暫停執行,并將 yield 后面的表達式作為返回值返回。當生成器再次被調用時,它會從暫停的位置繼續執行,直到下一個 yield 語句或函數結束。簡單來說,yield 可以將一個函數變成一個可以暫停和恢復的函數,用于迭代操作。
二、Python介紹
1、簡介
Python由荷蘭數學和計算機科學研究學會的吉多·范羅蘇姆于1990年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。Python語法和動態類型,以及解釋型語言的本質,使它成為多數平臺上寫腳本和快速開發應用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用于獨立的、大型項目的開發。
Python在各個編程語言中比較適合新手學習,Python解釋器易于擴展,可以使用C語言或C++(或者其他可以通過C調用的語言)擴展新的功能和數據類型。Python也可用于可定制化軟件中的擴展程序語言。Python豐富的標準庫,提供了適用于各個主要系統平臺的源碼或機器碼。
2、發展歷程
自20世紀90年代初Python語言誕生至今,它已被逐漸廣泛應用于系統管理任務的處理和Web編程。1995年,Guido van Rossum在弗吉尼亞州的國家創新研究公司(CNRI)繼續他在Python上的工作,并在那里發布了該軟件的多個版本。2000年五月,Guido van Rossum和Python核心開發團隊轉到BeOpen.com并組建了BeOpen PythonLabs團隊。同年十月,BeOpen PythonLabs團隊轉到Digital Creations(現為Zope Corporation)。
2001年,Python軟件基金會(PSF)成立,這是一個專為擁有Python相關知識產權而創建的非營利組織。Zope Corporation是PSF的贊助成員。Python的創始人為荷蘭人吉多·范羅蘇姆(Guido van Rossum)。1989年圣誕節期間,在阿姆斯特丹,Guido為了打發圣誕節的無趣,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。之所以選中單詞Python(意為大蟒蛇)作為該編程語言的名字,是因為英國20世紀70年代首播的電視喜劇《蒙提·派森的飛行馬戲團》(Monty Python’s Flying Circus)。
ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC這種語言非常優美和強大,是專門為非專業程序員設計的。但是ABC語言并沒有成功,究其原因,Guido認為是其非開放造成的。Guido決心在Python中避免這一錯誤。同時,他還想實現在ABC中閃現過但未曾實現的東西。就這樣,Python在Guido手中誕生了。可以說,Python是從ABC發展起來,主要受到了Modula-3(另一種相當優美且強大的語言,為小型團體所設計的)的影響。并且結合了Unix shell和C的習慣。
Python已經成為較受歡迎的程序設計語言之一。自從2004年以后,python的使用率呈線性增長。Python 2于2000年10月16日發布,穩定版本是Python 2.7。Python 3于2008年12月3日發布,不完全兼容Python 2。2011年1月,它被TIOBE編程語言排行榜評為2010年度語言。
由于Python語言的簡潔性、易讀性以及可擴展性,在國外用Python做科學計算的研究機構日益增多,一些知名大學已經采用Python來教授程序設計課程。例如卡耐基梅隆大學的編程基礎、麻省理工學院的計算機科學及編程導論就使用Python語言講授。眾多開源的科學計算軟件包都提供了Python的調用接口,例如知名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫ITK。而Python專用的科學計算擴展庫就更多了,例如如下3個十分經典的科學計算擴展庫:NumPy、SciPy和matplotlib,它們分別為Python提供了快速數組處理、數值運算以及繪圖功能。因此Python語言及其眾多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數據、制作圖表,甚至開發科學計算應用程序。2018年3月,該語言作者在郵件列表上宣布Python 2.7將于2020年1月1日終止支持。用戶如果想要在這個日期之后繼續得到與Python 2.7有關的支持,則需要付費給商業供應商。
3、優點
簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專注于解決問題而不是去搞明白語言本身。易學:Python極其容易上手,因為Python有極其簡單的說明文檔。易讀、易維護:風格清晰劃一、強制縮進。速度較快:Python的底層是用C語言寫的,很多標準庫和第三方庫也都是用C寫的,運行速度非常快。免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。FLOSS是基于一個團體分享知識的概念。高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。可移植性:由于它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。這些平臺包括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開發的android平臺。解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。運行程序的時候,連接/轉載器軟件把你的程序從硬盤復制到內存中并且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行程序。在計算機內部,Python解釋器把源代碼轉換成稱為字節碼的中間形式,然后再把它翻譯成計算機使用的機器語言并運行。這使得使用Python更加簡單。也使得Python程序更加易于移植。面向對象:Python既支持面向過程的編程也支持面向對象的編程。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”的語言中,程序是由數據和功能組合而成的對象構建起來的。Python是完全面向對象的語言。函數、模塊、數字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復用性。Python支持重載運算符和動態類型。相對于Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools,itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。可擴展性、可擴充性:如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫,然后在Python程序中使用它們。Python本身被設計為可擴充的。并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內。因此,很多人還把Python作為一種“膠水語言”(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調用相應的模塊。《Python技術手冊》的作者馬特利(Alex Martelli)說:“這很難講,不過,2004年,Python已在Google內部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,他們的目的是 Python where we can,C++ where we must,在操控硬件的場合使用C++,在快速開發時候使用Python。”可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。豐富的庫:Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。規范的代碼:Python采用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進制代碼。Python的作者設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規則。一個和其他大多數語言(如C)的區別就是,一個模塊的界限,完全是由每行的首字符在這一行的位置來決定(而C語言是用一對大括號來明確的定出模塊的邊界,與字符的位置毫無關系)。通過強制程序員們縮進(包括if,for和函數定義等所有需要使用模塊的地方),Python確實使得程序更加清晰和美觀。高級動態編程:雖然Python可能被粗略地分類為“腳本語言”(script language),但實際上一些大規模軟件開發計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態編程語言,原因是“腳本語言”泛指僅作簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,并不能與Python相提并論。做科學計算優點多:說起科學計算,首先會被提到的可能是MATLAB。除了MATLAB的一些專業性很強的工具箱還無法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應的擴展庫。4、缺點
單行語句和命令行輸出問題:很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序寫入一個.py文件。給初學者帶來困惑:獨特的語法,這也許不應該被稱為局限,但是它用縮進來區分語句關系的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程序員,也可能陷入陷阱當中。運行速度慢:這里是指與C和C++相比。Python開發人員盡量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合并到Python內。所以很多人認為Python很慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向于使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。延伸閱讀1:python標準庫
Python擁有一個強大的標準庫。Python語言的核心只包含數字、字符串、列表、字典、文件等常見類型和函數,而由Python標準庫提供了系統管理、網絡通信、文本處理、數據庫接口、圖形系統、XML處理等額外的功能。Python標準庫命名接口清晰、文檔良好,很容易學習和使用。

相關推薦HOT
更多>>
在 iPad 上運行 Windows 是什么體驗?
一、在 iPad 上運行 Windows 是什么體驗目前市面上有一些能夠在 iPad 上運行 Windows 的應用程序,例如 Parallels Access、Splash較好、VMware ...詳情>>
2023-10-14 19:14:27
vector, list, map等容器使用場合是什么?
一、vector, list, map等容器使用場合vector適用于對象簡單,變化較小,并且頻繁隨機訪問的場景。list適用經常進行插入和刪除并且不經常隨機訪...詳情>>
2023-10-14 14:59:11
分庫分表的數據庫和分布式數據庫有什么區別?
一、分庫分表的數據庫和分布式數據庫有什么區別分庫分表的數據庫:沒有這種數據庫,所謂分庫分表,這是開發應用的程序員通過自己的代碼、或者底...詳情>>
2023-10-14 13:59:18
APP定制開發的難點有哪些?
一、APP定制開發的難點1、多平臺適配不同的移動平臺(如iOS和Android)具有不同的操作系統、開發語言和開發工具。在進行APP定制開發時,需要適...詳情>>
2023-10-14 12:57:35