成人免费观看网欧美片-成人免费观看视频-成人免费观看男女羞羞视频-成人免费观看的视频黄页-成人免费高清视频-成人免费福利片在线观看

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

手機站
千鋒教育

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

千鋒教育

掃一掃進入千鋒手機站

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

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

當(dāng)前位置:首頁  >  技術(shù)干貨  > Python中動態(tài)編譯函數(shù)compile參數(shù)filename的作用是什么?

Python中動態(tài)編譯函數(shù)compile參數(shù)filename的作用是什么?

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-10-12 21:29:43 1697117383

一、Python中動態(tài)編譯函數(shù)compile參數(shù)filename的作用是什么

在Python中,compile()函數(shù)用于將普通的Python代碼編譯成代碼對象,以便稍后使用eval()函數(shù)或exec()函數(shù)來執(zhí)行這些代碼對象。compile()函數(shù)有三個參數(shù):source、filename和mode。其中,source參數(shù)是必須的,它指定了要編譯的Python代碼;filename和mode參數(shù)是可選的。

filename參數(shù)是一個字符串,用于指定用于編譯Python代碼的文件名。當(dāng)編譯代碼對象時,如果指定了filename參數(shù),那么Python編譯器會把編譯后的代碼對象和這個文件名關(guān)聯(lián)起來,并把文件名作為代碼對象的一個屬性。這個屬性在使用traceback模塊進行調(diào)試時非常有用,因為它可以幫助開發(fā)人員快速定位代碼中出現(xiàn)錯誤的位置。如果不指定filename參數(shù),則在編譯代碼時不會創(chuàng)建這個屬性。需要注意的是,如果需要在exec或eval函數(shù)中執(zhí)行編譯后的代碼時,需要傳遞與compile函數(shù)中指定的filename參數(shù)相同的文件名參數(shù),以便調(diào)試器正確地跟蹤錯誤。

二、compile介紹

1、語法

compile內(nèi)置函數(shù),語法如下:

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

2、參數(shù)解釋

source:是一串字符串的源碼,或者是AST(抽像語法樹)對象數(shù)組,就是需要執(zhí)行的代碼對象。filename:參數(shù)filename用于在執(zhí)行代碼報錯的運行時錯誤消息中顯示該參數(shù)對應(yīng)的信息,當(dāng)source是執(zhí)行代碼從文件中讀取的代碼字符串時,則可以存放文件名,如果不是從文件里讀取源碼來編譯,那么這里可以放一些用來標(biāo)識這些代碼的字符串,其值理論上是任何字符串,沒有特殊要求,一般都放‘’,用于表示前面的source是個字符串,如果source放AST,則可以標(biāo)識為‘’;mode:三個取值,分別是exec、single、eval,如果是exec表示編譯的是一段代碼或模塊,single表示編譯的是一個單獨的語句,eval表示編譯的是一個表達式而不是一個語句。flags和dont_inherit:這兩個參數(shù)是組合使用,可選參數(shù) flags 和 dont_inherit 控制在編譯 source 時要用到哪個 future 語句。如果兩者都未提供(或都為零)則會使用調(diào)用 compile() 的代碼中有效的 future 語句來編譯代碼。 如果給出了 flags 參數(shù)但沒有 dont_inherit(或是為零)則 flags 參數(shù)所指定的 以及那些無論如何都有效的 future 語句會被使用。 如果 dont_inherit 為一個非零整數(shù),則只使用 flags 參數(shù) — 在調(diào)用外圍有效的 future 語句將被忽略。future 語句使用比特位來指定,多個語句可以通過按位或來指定。具體特性的比特位可以通過 __future__ 模塊中的 _Feature 類的實例的 compiler_flag 屬性來獲得。optimize:optimize到Python的代碼優(yōu)化機制。Python為了適應(yīng)不同的執(zhí)行要求定義了幾種代碼優(yōu)化的策略,如果缺省值是-1,表示使用命令行參數(shù)-O中獲取的優(yōu)化等級為準(zhǔn);如果設(shè)置值為0,是沒有優(yōu)化,__debug__為true支持debug信息(if __debug__語句下的語句,就是開發(fā)者根據(jù)需要加入的調(diào)試信息)在運行中展示;如果設(shè)置值為1,assert語句被刪除,__debug__設(shè)置為false確保調(diào)試語句不執(zhí)行;如果設(shè)置值為2,除了設(shè)置值為1的功能之外,還會把代碼里文檔字符串也刪除掉,達到優(yōu)異優(yōu)化結(jié)果。

3、compile函數(shù)返回結(jié)果

如果編譯通過,結(jié)果可以生成字節(jié)碼(類型code)或者AST(抽像語法樹),字節(jié)碼可以使用函數(shù)exec()或eval來執(zhí)行,而AST可以使用eval()來繼續(xù)編譯。ATS 對象:Abstract Syntax Tree,抽象語法樹,是源代碼語法結(jié)構(gòu)的一種抽象表示。exec 執(zhí)行儲存在字符串或文件中的Python語句,相比于 eval,exec可以執(zhí)行更復(fù)雜的 Python 代碼。需要說明的是在 Python2 中exec不是函數(shù),而是一個內(nèi)置語句。如果編譯的源碼不合法,此函數(shù)會觸發(fā) SyntaxError 異常;如果源碼包含空字節(jié)(空字符串),則3.5版本以前會觸發(fā) ValueError 異常,3.5版本后則不會觸發(fā)可以編譯通過并執(zhí)行。注意:

在 single 或 eval 模式編譯多行代碼字符串(這些串必須是一個完整語句或表達式而不是多個語句或表達式)時,輸入必須以至少一個換行符結(jié)尾如果編譯足夠大或者足夠復(fù)雜的字符串成 AST 對象時,Python 解釋器會因為 Python AST 編譯器的棧深度限制而崩潰

三、python介紹

1、簡介

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

Python解釋器易于擴展,可以使用C語言或C++(或者其他可以通過C調(diào)用的語言)擴展新的功能和數(shù)據(jù)類型。?Python也可用于可定制化軟件中的擴展程序語言。Python豐富的標(biāo)準(zhǔn)庫,提供了適用于各個主要系統(tǒng)平臺的源碼或機器碼。

2、優(yōu)點

簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身。易學(xué):Python極其容易上手,因為Python有極其簡單的說明文檔。易讀、易維護:風(fēng)格清晰劃一、強制縮進速度較快:Python的底層是用C語言寫的,很多標(biāo)準(zhǔn)庫和第三方庫也都是用C寫的,運行速度非常快。免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發(fā)布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。FLOSS是基于一個團體分享知識的概念。高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細節(jié)。可移植性:由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工作在不同平臺上)。這些平臺包括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開發(fā)的android平臺。解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉(zhuǎn)換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標(biāo)記、選項完成。運行程序的時候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行程序。在計算機內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計算機使用的機器語言并運行。這使得使用Python更加簡單。也使得Python程序更加易于移植。面向?qū)ο?/strong>:Python既支持面向過程的編程也支持面向?qū)ο蟮木幊獭T凇懊嫦蜻^程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο蟆钡恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復(fù)用性。Python支持重載運算符和動態(tài)類型。相對于Lisp這種傳統(tǒng)的函數(shù)式編程語言,Python對函數(shù)式設(shè)計只提供了有限的支持。有兩個標(biāo)準(zhǔn)庫(functools,itertools)提供了Haskell和Standard ML中久經(jīng)考驗的函數(shù)式程序設(shè)計工具。可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。豐富的庫:Python標(biāo)準(zhǔn)庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等等。規(guī)范的代碼:Python采用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進制代碼。Python的作者設(shè)計限制性很強的語法,使得不好的編程習(xí)慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規(guī)則。一個和其他大多數(shù)語言(如C)的區(qū)別就是,一個模塊的界限,完全是由每行的首字符在這一行的位置來決定(而C語言是用一對大括號來明確的定出模塊的邊界,與字符的位置毫無關(guān)系)。通過強制程序員們縮進(包括if,for和函數(shù)定義等所有需要使用模塊的地方),Python確實使得程序更加清晰和美觀。高級動態(tài)編程:雖然Python可能被粗略地分類為“腳本語言”(script language),但實際上一些大規(guī)模軟件開發(fā)計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態(tài)編程語言,原因是“腳本語言”泛指僅作簡單程序設(shè)計任務(wù)的語言,如shellscript、VBScript等只能處理簡單任務(wù)的編程語言,并不能與Python相提并論。

3、開發(fā)工具

Tkinter:Python默認的圖形界面接口。Tkinter是一個和Tk接口的Python模塊,Tkinter庫提供了對Tk API的接口,它屬于Tcl/Tk的GUI工具組。PyGTK:用于python GUI程序開發(fā)的GTK+庫。GTK就是用來實現(xiàn)GIMP和Gnome的庫。PyQt:用于python的Qt開發(fā)庫。QT就是實現(xiàn)了KDE環(huán)境的那個庫,由一系列的模塊組成,有qt,qtcanvas,qtgl,qtnetwork,qtsql,qttable,qtui and qtxml,包含有300個類和超過5750個的函數(shù)和方法。PyQt還支持一個叫qtext的模塊,它包含一個QScintilla庫。該庫是Scintillar編輯器類的Qt接口。wxPython:GUI編程框架,熟悉MFC的人會非常喜歡,簡直是同一架構(gòu)(對于初學(xué)者或者對設(shè)計要求不高的用戶來說,使用Boa Constructor可以方便迅速的進行wxPython的開發(fā))屬于外置庫,要先下載。PIL:python提供強大的圖形處理的能力,并提供廣泛的圖形文件格式支持,該庫能進行圖形格式的轉(zhuǎn)換、打印和顯示。還能進行一些圖形效果的處理,如圖形的放大、縮小和旋轉(zhuǎn)等。是Python用戶進行圖象處理的強有力工具。Psyco:一個Python代碼加速度器,可使Python代碼的執(zhí)行速度提高到與編譯語言一樣的水平。xmpppy:Jabber服務(wù)器采用開發(fā)的XMPP協(xié)議,Google Talk也是采用XMPP協(xié)議的IM系統(tǒng)。在Python中有一個xmpppy模塊支持該協(xié)議。也就是說,我們可以通過該模塊與Jabber服務(wù)器通信,是不是很Cool。PyMedia:用于多媒體操作的python模塊。它提供了豐富而簡單的接口用于多媒體處理(wav,mp3,ogg,avi,divx,dvd,cdda etc)。可在Windows和Linux平臺下使用。Pmw:Python megawidgets,Python超級GUI組件集,一個在python中利用Tkinter模塊構(gòu)建的高級GUI組件,每個Pmw都合并了一個或多個Tkinter組件,以實現(xiàn)更有用和更復(fù)雜的功能。PyXML:用Python解析和處理XML文檔的工具包,包中的4DOM是完全相容于W3C DOM規(guī)范的。它包含以下內(nèi)容:xmlproc:一個符合規(guī)范的XML解析器。Expat:一個快速的,非驗證的XML解析器。還有其他和他同級別的還有 PyHtml PySGML。PyGame:用于多媒體開發(fā)和游戲軟件開發(fā)的模塊。可以直接使用pip install pygame下載。

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

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

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(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