版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Python基礎(chǔ)知識
Python由荷蘭數(shù)學和計算機科學研究學會的GuidovanRossum于1990
年代初設(shè)計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數(shù)
據(jù)結(jié)構(gòu),還能簡單有效地面向?qū)ο缶幊?。Python語法和動態(tài)類型,以及解釋型
語言的本質(zhì),使它成為多數(shù)平臺上寫腳本和快速開發(fā)應(yīng)用的編程語言,隨著版本
的不斷更新和語言新功能的添加,逐漸被用于獨立的、大型項目的開發(fā)。
Python解釋器易于擴展,可以使用C或C-+(或者其他可以通過C調(diào)用
的語言)擴展新的功能和數(shù)據(jù)類型。Python也可用于可定制化軟件中的擴展程
序語言。Python豐富的標準庫,提供了適用于各個主要系統(tǒng)平臺的源碼或機器
碼。
1.發(fā)展歷程
自從20世紀90年代初Python語言誕生至今,它已被逐漸廣泛應(yīng)用于系
統(tǒng)管理任務(wù)的處理和Web編程。
Python的創(chuàng)始人為荷蘭人吉多?范羅蘇姆(GuidovanRossum工1989年
圣誕節(jié)期間,在阿姆斯特丹,Guido為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新
的腳本解釋程序,作為ABC語言的一種繼承。之所以選中Python(大蟒蛇的
意思)作為該編程語言的名字,是取自英國20世紀70年代首播的電視喜劇《蒙
提?派森的飛行馬戲團》(MontyPython'sFlyingCircus\
ABC是由Guido參加設(shè)計的一種教學語言。就Guido本人看來,ABC這
種語言非常優(yōu)美和強大,是專門為非專業(yè)程序員設(shè)計的。但是ABC語言并沒有
成功,究其原因,Guido認為是其非開放造成的。Guido決心在Python中避
免這一錯誤。同時,他還想實現(xiàn)在ABC中閃現(xiàn)過但未曾實現(xiàn)的東西。
就這樣,Python在Guido手中誕生了??梢哉f,Python是從ABC發(fā)展
起來,主要受到了Modula-3(另一種相當優(yōu)美且強大的語言,為小型團體所設(shè)
計的)的影響。并且結(jié)合了Unixshell和C的習慣。
Python已經(jīng)成為最受歡迎的程序設(shè)計語言之一。自從2004年以后python
的使用率呈線性增長。Python2于2000年10月16日發(fā)布穩(wěn)定版本是Python
2.7。Python3于2008年12月3日發(fā)布,不完全兼容Python2。2011年1
月,它被TIOBE編程語言排行榜評為2010年度語言。
Apython
標識
由于Python語言的簡潔性、易讀性以及可擴展性,在國外用Python做科
學計算的研究機構(gòu)日益增多,一些知名大學已經(jīng)采用Python來教授程序設(shè)計課
程。例如卡耐基梅隆大學的編程基礎(chǔ)、麻省理工學院的計算機科學及編程導論就
使用Python語言講授。眾多開源的科學計算軟件包都提供了Python的調(diào)用接
口,例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫(yī)學圖像處理庫
而專用的科學計算擴展庫就更多了,例如如下個十分經(jīng)典的科
ITKePython3
學計算擴展庫:NumPy、SciPy和matplotlib,它們分別為Python提供了快
速數(shù)組處理、數(shù)值運算以及繪圖功能。因此Python語言及其眾多的擴展庫所構(gòu)
成的開發(fā)環(huán)境十分適合工程技術(shù)、科研人員處理實險數(shù)據(jù)、制作圖表,甚至開發(fā)
科學計算應(yīng)用程序。2018年3月,該語言作者在郵件列表上宣布Python2.7
將于2020年1月1日終止支持。用戶如果想要在這個日期之后繼續(xù)得到與
Python2.7有關(guān)的支持,則需要付費給商業(yè)供應(yīng)商。
2.語言特點
Python
2?1.優(yōu)點
簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python
程序就感覺像是在讀英語一樣。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言
本身。
易學:Python極其容易上手,因為Python有極其簡單的說明文檔。
易讀、易維護:風格清晰劃一、強制縮進
用途廣泛
也使得Python程序更加易于移植。
面向?qū)ο螅篜ython既支持面向過程的編程也支持面向?qū)ο蟮木幊?。在“?/p>
向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在
"面向?qū)ο蟆钡恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。
Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對象。并
且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復用性。Python
支持重載運算符和動態(tài)類型。相對于Lisp這種傳統(tǒng)的函數(shù)式編程語言,Python
對函數(shù)式設(shè)計只提供了有限的支持。有兩個標準庫(functools,itertools)提供了
Haskell和StandardML中久經(jīng)考驗的函數(shù)式程序設(shè)計工具。
可擴展性、可擴充性:如果需要一段關(guān)鍵代碼運行得更快或者希望某些算法
不公開,可以部分程序用C或C++編寫,然后在Python程序中使用它們。
Python本身被設(shè)計為可擴充的。并非所有的特性和功能都集成到語言核心。
Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、
Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語
言的程序內(nèi)。因此很多人還把Python作為一種"膠水語言〃(gluelanguage)
使甩使用Python將其他語言編寫的程序進行集成和封裝。在Google內(nèi)部的
很多項目,例如GoogleEngine使用C++編寫性能要求極高的部分,然后用
Python或Java/Go調(diào)用相應(yīng)的模塊?!禤ython技術(shù)手冊》的作者馬特利(Alex
Martelli)說:"這很難講,不過,2004年,Python已在Google內(nèi)部使用,
Google召募許多Python高手,但在這之前就已決定使用Python,他們的目
的是Pythonwherewecan,C++wherewemust,在操控硬件的場合使用
C++,在快速開發(fā)時候使用Python。"
可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功
能。
豐富的庫:Python標準庫確實很龐大。它可以幫助處理各種工作,包括正
則表達式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電
子郵件、XML、XML-RPC、HTML.WAV文件、密碼系統(tǒng)、GUI(圖形用戶界
面ITk和其他與系統(tǒng)有關(guān)的操作。這被稱作Python的〃功能齊全〃理念,除
了標準庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python
圖像庫等等。
規(guī)范的代碼:Python采用強制縮進的方式使得代碼具有較好可讀性.而
Python語言寫的程序不需要編譯成二進制代碼。Python的作者設(shè)計限制性很
強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通
過編譯。其中很重要的一項就是Python的縮進規(guī)則。一個和其他大多數(shù)語言(如
C)的區(qū)別就是,一個模塊的界限,完全是由每行的首字符在這一行的位置來決
定(而C語言是用一對花括號{}來明確的定出模塊的邊界,與字符的位置毫無關(guān)
系工通過強制程序員們縮進(包括if,for和函數(shù)定義等所有需要使用模塊的地
方)確實使得程序更加清晰和美觀。
zPython
高級動態(tài)編程:雖然Python可能被粗略地分類為"腳本語言"(script
language)但實際上一些大規(guī)模軟件開發(fā)計劃例如Zope、Mnet及BitTorrent,
Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態(tài)編程語
言,原因是“腳本語言”泛指僅作簡單程序設(shè)計任務(wù)的語言,如shellscript
VBScript等只能處理簡單任務(wù)的編程語言,并不能與Python相提并論。
做科學計算優(yōu)點多:說起科學計算,首先會被提到的可能是MATLAB.除
了MATLAB的一些專業(yè)性很強的工具箱還無法被替代之外,MATLAB的大部分
常用功能都可以在Python世界中找到相應(yīng)的擴展庫。和MATLAB相比,用
Python做科學計算有如下優(yōu)點:
?首先,MATLAB是一款商用軟件,并且價格不菲。而Python完全免費,
眾多開源的科學計算庫都提供了Python的調(diào)用接口。用戶可以在任何計算機上
免費安裝Python及其絕大多數(shù)擴展庫。
?其次,與MATLAB相比,Python是一門更易學、更嚴謹?shù)某绦蛟O(shè)計語
言。它能讓用戶編寫出更易讀、易維護的代碼。
?最后,MATLAB主要專注于工程和科學計算。然而即使在計算領(lǐng)域,也
經(jīng)常會遇到文件管理、界面設(shè)計、網(wǎng)絡(luò)通信等各種需求。而Python有著豐富的
擴展庫,可以輕易完成各種高級任務(wù),開發(fā)者可以用Python實現(xiàn)完整應(yīng)用程序
所需的各種功能。
2.2.缺點
單行語句和命令行輸出問題:很多時候不能將程序連寫成一行,如import
sys;foriinsys.path:printi。而perl和awk就無此限制,可以較為方便的在shell
下完成簡單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€.py文件。
給初學者帶來困惑:獨特的語法,這也許不應(yīng)該被稱為局限,但是它用縮進
來區(qū)分語句關(guān)系的方式還是給很多初學者帶來了困惑。即便是很有經(jīng)臉的
Python程序員,也可能陷入陷阱當中。
運行速度慢:這里是指與C和C++相比。Python開發(fā)人員盡量避開不成
熟或者不重要的優(yōu)化。一些針對非重要部位的加快運行速度的補丁通常不會被合
并到Python內(nèi)。所以很多人認為Python很慢。不過,根據(jù)二八定律,大多數(shù)
程序?qū)λ俣纫蟛桓?。在某些對運行速度要求很高的情況,Python設(shè)計師傾向
于使用JIT技術(shù),或者用使用C/C++語言改寫這部分程序??捎玫腏IT技術(shù)是
PyPy。
2.3.和其他語言區(qū)別
>對于一個特定的問題,只要有一種最好的方法來解決
這在由TimPeters寫的Python格言(稱為TheZenofPython)里面表
述為:Thereshouldbeone—andpreferablyonlyone—obviouswaytodo
it.這正好和Perl語言(另一種功能類似的高級動態(tài)語言)的中心思想
TMTOWTDI(There'sMoreThanOneWayToDoIt)完全相反。
Python的設(shè)計哲學是〃優(yōu)雅〃、〃明確〃、"簡單〃。因此,Perl語言中
“總是有多種方法來做同一件事〃的理念在Python開發(fā)者中通常是難以忍受
的。Python開發(fā)者的哲學是"用一種方法最好是只有一種方法來做一件事”。
在設(shè)計Python語言時,如果面臨多種選擇,Python開發(fā)者一般會拒絕花俏的
語法,而選擇明確的沒有或者很少有歧義的語法。由于這種設(shè)計觀念的差異,
Python源代碼通常被認為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟
件開發(fā)。這些準則被稱為Python格言。在Python解釋器內(nèi)運行importthis
可以獲得完整的列表。
>更高級的VirtualMachine
Python在執(zhí)行時,首先會將.py文件中的源代碼編譯成Python的byte
code(字節(jié)碼),然后再由PythonVirtualMachine(Python虛擬機)來執(zhí)行
這些編譯好的bytecode。這種機制的基本思想跟Java.NET是一致的。然而,
PythonVirtualMachine與Java或.NET的VirtualMachine不同的是Python
的VirtualMachine是一種更高級的VirtualMachine。這里的高級并不是通常
意義上的高級,不是說Python的VirtualMachine比Java或.NET的功能更強
大,而是說和Java或NET相比,Python的VirtualMachine距離真實機器的
距離更遠?;蛘呖梢赃@么說,Python的VirtualMachine是一種抽象層次更高
的VirtualMachine。基于C的Python編譯出的字節(jié)碼文件通常是.pyc格式。
除此之外,Python還可以以交互模式運行,比如主流操作系統(tǒng)Unix/Linux.
Mac、Windows都可以直接在命令模式下直接運行Python交互環(huán)境。直接下
達操作指令即可實現(xiàn)交互操作。
3.基本語法
Python的設(shè)計目標之一是讓代碼具備高度的可閱讀性。它設(shè)計時盡量使用
其它語言經(jīng)常使用的標點符號和英文單字,讓代碼看起來整潔美觀。它不像其他
的靜態(tài)語言如c、Pascal那樣需要重復書寫聲明語句,也不像它們的語法那樣經(jīng)
常有特殊情況和意外。
Python開發(fā)者有意讓違反了縮進規(guī)則的程序不能通過編譯,以此來強制程
序員養(yǎng)成良好的編程習慣。并且Python語言利用縮進表示語句塊的開始和退出
(Off-side規(guī)則),而非使用花括號或者某種關(guān)鍵字。增加縮進表示語句塊的開
始,而減少縮進則表示語句塊的退出??s進成為了語法的一部分。例如if語句:
python3
age=int(input(“請輸入你的年齡:"))
ifage<21:
print(“你不能買酒?!埃?/p>
print(“不過你能買口香糖?!保?/p>
print("這句話在if語句塊的外面。”)
根據(jù)PEP的規(guī)定,必須使用4個空格來表示每級縮進。使用Tab字符和其
它數(shù)目的空格雖然都可以編譯通過,但不符合編碼規(guī)范。支持Tab字符和其它
數(shù)目的空格僅僅是為兼容很舊的的Python程序和某些有問題的編輯程序。
3.1.控制語句
if語句,當條件成立時運行語句塊。經(jīng)常與else,elif(相當于elseif)配合
使用。
for語句,遍歷列表、字符串、字典、集合等迭代器,依次處理迭代器中的
每個兀素。
while語句,當條件為真時,循環(huán)運行語句塊。
try語句,與except,finally配合使用處理在程序運行中出現(xiàn)的異常情況。
class語句,用于定義類型。
def語句,用于定義函數(shù)和類型的方法。
pass語句,表示此行為空,不運行任何操作。
assert語句,用于程序調(diào)試階段時測試運行條件是否滿足。
with語句,Python2.6以后定義的語法,在一個場景中運行語句塊。比如,
運行語句塊前加密,然后在語句塊運行退出后解密。
yield語句,在迭代器函數(shù)內(nèi)使用,用于返回一個元素。自從Python2.5
版本以后。這個語句變成一個運算符。
raise語句,制造一個錯誤。
import語句,導入一^模塊或包。
from…import語句,從包導入模塊或從模塊導入某個對象。
import...as語句,將導入的對象賦值給一個變量。
in語句,判斷一個對象是否在一個字符串/列表/元組里。
3.2.表達式
Python的表達式寫法與C/C++類似。只是在某些寫法有所差別。
主要的算術(shù)運算符與C/C++類似。+,-「,/、〃「*,%分別表示加法或者
取正、減法或者取負、乘法、除法、整除、乘方、取補、取余。
Python使用and,or,not表示邏輯運算。
is,isnot用于比較兩個變量是否是同一個對象。in,notin用于判斷一個對
象是否屬于另外一個對象。
Python支持"列表推導式"(listcomprehension),比如計算0-9的平
方和:
>>>sum(x*xforxinrange(lO))
285
Python使用lambda表示匿名函數(shù)。匿名函數(shù)體只能是表達式。比如:
>>>add=lambdax,y:x+y
>>>add(3,2)
5
Python使用yifcondelsex表示條件表達式。意思是當cond為真時,
表達式的值為否則表達式的值為(相當于和里的
y,C++Javacond?y:xo
Python區(qū)分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而
tuple的寫法是Q,2,3)??梢愿淖僱ist中的元素,而不能改變tuple。在某些清
況下,tuple的括號可以省略。tuple對于賦值語句有特殊的處理。因此,可以
同時賦值給多個變量,比如:
>>>x,y=1,2#同時給x,y賦值,最終結(jié)果:
x=l,y=2
特別地,可以使用以下這種形式來交換兩個變量的值:
>>>x,y=y,x#最終結(jié)果:y=l,x=2
Python使用(單引號)和"(雙引號)來表示字符串。與Perl、UnixShell語言
或者Ruby、Groovy等語言不一樣,兩種符號作用相同。一般地,如果字符串
中出現(xiàn)了雙引號,就使用單引號來表示字符串;反之則使用雙引號。如果都沒有
出現(xiàn),就依個人喜好選擇。出現(xiàn)在字符串中的'(反斜杠)被解釋為特殊字符,比如
\n表示換行符。表達式前加r指示Python不解釋字符串中出現(xiàn)的\。這種寫法
通常用于編寫正則表達式或者Windows文件路徑。
Python支持列表切割(listslices),可以取得完整列表的一部分。支持切割
操作的類型有str,bytes,list,tuple等。它的語法是…[left:right]或
者…[left:right:stride]。假定nums變量的值是[1,3,5,7,8,13,20],那么下面
幾個語句為真:
nums[2:5]==[5,7,8]從下標為2的元素切割到下標為5的元素,但不包
含下標為5的元素。
nums[l:]==[3,5,7,8,13,20]切割到最后一個元素。
nums[:-3]==[1,3,5,7]從最開始的元素一直切割到倒數(shù)第3個元素。
nums[:]==[1,3,5,7,8,13,20]返回所有元素。改變新的列表不會影響
至
Unumso
nums[l:5:2]==⑶刀從下標為1的元素切割到下標為5的元素,且步長
為2。
3.3.函數(shù)
Python的函數(shù)支持遞歸、默認參數(shù)值、可變參數(shù),但不支持函數(shù)重載。為
了增強代碼的可讀性,可以在函數(shù)后書寫"文檔字符串"(Documentation
Strings,或者簡稱docstrings),用于解釋函數(shù)的作用、參數(shù)的類型與意義、返
回值類型與取值范圍等??梢允褂脙?nèi)置函數(shù)help。打印出函數(shù)的使用幫助。比如:
>>>defrandint(a,b):
..."Returnrandomintegerinrange[a,b],includingbothend
points."...
>>>help(randint)
Helponfunctionrandintinmodule_main_:
randint(a,b)
Returnrandomintegerinrange[a,b]zincludingbothendpoints.
3.4.對象的方法
對象的方法是指綁定到對象的函數(shù)。調(diào)用對象方法的語法是
instance.method(arguments)。它等價于調(diào)用Class.method(instance,
arguments).當定義對象方法時,必須顯式地定義第一個參數(shù),一般該參數(shù)名
都使用self,用于訪問對象的內(nèi)部數(shù)據(jù)。這里的self相當于C++,Java里面的
this變量但是我們還可以使用任何其它合法的參數(shù)名比如this和mine等,
self與C++,Java里面的this不完全一樣,它可以被看作是一個習慣性的用法,
我們傳入任何其它的合法名稱都行,比如:
classFish:
:defeat(seltfood):
iffoodisnotNone:
,self.hungry=False
I
(classUser:
def_init_(myself;name):
i=name
#構(gòu)造Fish的實例:
of=Fish()
#以下兩種調(diào)用形式是等價的:
1
Fish.eat(f/"earthworm")
f.eat("earthworm")
2
u=User('username')
print()
3
4
5
6
Python認識一些以開始并以結(jié)束的特殊方法名,它們用于實
現(xiàn)運算符重靳口實現(xiàn)多種特殊功能。
3.5.類型
Python采用動態(tài)類型系統(tǒng)。在編譯的時候,Python不會檢查對象是否擁
有被調(diào)用的方法或者屬性,而是直至運行時,才做出檢查。所以操作對象時可能
會拋出異常。不過,雖然Python采用動態(tài)類型系統(tǒng),它同時也是強類型的。
Python禁止沒有明確定義的操作,比如數(shù)字加字符串。
與其它面向?qū)ο笳Z言一樣,Python允許程序員定義類型。構(gòu)造一個對象只
需要像函數(shù)一樣調(diào)用類型即可,比如,對于前面定義的類型,使用
FishFish()0
類型本身也是特殊類型type的對象(type類型本身也是type對象),這種特殊
的設(shè)計允許對類型進行反射編程。
Python內(nèi)置豐富的數(shù)據(jù)類型。與Java、C++相比,這些數(shù)據(jù)類型有效地減
少代碼的長度。下面這個列表簡要地描述了Python內(nèi)置數(shù)據(jù)類型(適用于
Python3.x):
類型描述例子備注
,Wikipecia'
"Wikipedia"在Python3.x里,
str(string/一個由字符組成的不可更
"""Spanning字符串由Unicode
字符串)改的有序串行。
multiple字符組成
lines"""
一個由字節(jié)組成的不可更b'SomeASCH'在Python2.x里,
bytes(字節(jié))
改的有序串行。b"SomeASCII"bytes為str的一種
可以包含多種類型的可改[4.0,'string;
list(列表)無
變的有序串行True]
可以包含多種類型的不可(4.0,'string;
tuple(元組)無
改變的有序串行True)
{4.0,'string',
與數(shù)學中集合的概念類
set,True}
似。無序的、每個元素唯無
frozensetfrozenset([4.0,
O
'string',True])
一個可改變的由鍵值對組{'keyl':1.0,3:
diet(字典)無
成的無序串行。False}
int(整數(shù))精度不限的整數(shù)42無
float(浮點
浮點數(shù)。精度與系統(tǒng)相關(guān)。3.1415927無
數(shù))
complex復數(shù)3+2.7j無
邏輯值。只有兩個值:真、True
bool無
假False
builtm_funct
自帶的函數(shù),不可更改也print
ion_or_meth無
不可增加input
od
顯示某個值的類型,用type(l)->
type(類型)無
type(x)獲得type()->
range(lO)在Python2.x中,
……list(range(10)range為
range按順序排列的數(shù)
)->OL234,5,6,builtin_function_
7,8,9]or_method,獲得
range(l,10)的數(shù)為list
......Iist(range(l,l
0))?>[123,4,5,6,
7,8,9]
range(l,10,2)
……list(range(l,l
0,2))->[13,57,9]
除了各種數(shù)據(jù)類型,Python語言還用類型來表示函數(shù)、模塊、類型本身、
對象的方法、編譯后的Python代碼、運行時信息等等。因此,Python具備很
強的動態(tài)性。
3.6.數(shù)學運算
Python使用與C.Java類似的運算符,支持整數(shù)與浮點數(shù)的數(shù)學運算,同
時還支持復數(shù)運算與無窮位數(shù)(實際受限于計算機的能力)的整數(shù)運算。除了求
絕對值函數(shù)abs()^,大多數(shù)數(shù)學函數(shù)處于math和cmath模塊內(nèi)。前者用于實
數(shù)運算,而后者用于復數(shù)運算。使用時需要先導入它們,比如:
>>>importmath
>>>print(math.sin(math.pi/2))
1.0
fractions模塊用于支持分數(shù)運算;decimal模塊用于支持高精度的浮點數(shù)
、-ZEA-
必算。
Python定義求余運行a%b的值處于開區(qū)間[0,b)內(nèi),如果b是負數(shù),開
區(qū)間變?yōu)檫@是一個很常見的定義方式。不過其實它依賴于整除的定義。
(b,0]e
為了讓方程式:b*(a〃b)+a%b=a恒真,整除運行需要向負無窮小方向
取值。比如7//3的結(jié)果是2,而(-7)〃3的結(jié)果卻是-3。這個算法與其它很多
編程語言不一樣,需要注意,它們的整除運算會向0的方向取值。
Python允許像數(shù)學的常用寫法那樣連著寫兩個比較運行符。比如a<b<c
與a<bandb<c等價。C++的結(jié)果與Python不一樣,首先它會先計算a<
b,根據(jù)兩者的大小獲得0或者1兩個值之一,然后再與c進行比較。
4.幫助
4.1.列出模塊中的函數(shù)
用import導入模塊后,可使用函數(shù)dir(m)列出模塊的所有函數(shù),import
是導入模塊的命令,m是模塊名.
例子:
>>>importmath
>>>dir(math)
['doc\'loader\'name'package
'_spec_'z'acos'z'acosh','asin'z'asinh'z'atan','atan2
'atanh','ceil','copysign','cos','cosh','degrees','e',
'erf,'erfc\'exp','expml','fabs';'factorial','floor','f
mod','frexp','fsum','gamma','gcd','hypot','inf,'is
close','isfinite';'isinf,'isnan','Idexp','Igamma','log',
,loglO','loglp',1og2\'modf,'nan'z'pi','pow','radi
ans','sin\'sinh','sqrt','tan'z'tanh'z'tau'z'trunc']
這個例子列出math模塊的一些函數(shù),以雙下劃線(__)開頭的名稱用于較
復雜的python編程。
4.2.查看完整的python內(nèi)置函數(shù)清單
查看完整的python內(nèi)置函數(shù)清單,可在提示符后輸入>>>dir(__builtins_
Jo
例子:
>>>dir(_builtins_)
['ArithmeticError','AssertionError';'AttributeErr
or'z'BaseException','BlockinglOError','BrokenPipeEr
ror'z'BufferError','BytesWarning';'ChildProcessError
'ConnectionAbortedError','ConnectionError','Con
nectionRefusedError','ConnectionResetError','Depr
ecationWarning','EOFError','Ellipsis','EnvironmentE
rror','Exception';'False','FileExistsError','FileNotFou
ndError','FloatingPointError','FutureWarning','Gen
eratorExit','lOError','ImportError','ImportWarning',
,IndentationError','IndexError','InterruptedError','Is
ADirectoryError','KeyError','Keyboardlnterrupt',*Lo
okupError','MemoryError','ModuleNotFoundError',
'NameError','None','NotADirectoryError','Notlmpl
emented','NotlmplementedError','OSError','Overfl
owError','PendingDeprecationWarning','Permission
Error','ProcessLookupError'r'RecursionError','Refer
enceError','Resourcewarning',RuntimeError','Runt
imeWarning','StopAsyncIteration','Stoplteration'z'S
yntaxError','SyntaxWarning','SystemError','SystemE
;
xit'z'TabError',TimeoutError','True''TypeError','Un
boundLocalError','UnicodeDecodeError','UnicodeE
ncodeError','UnicodeError','UnicodeTranslateError,,
'UnicodeWarning','UserWarning','ValueError1,'War
ning\'WindowsError','ZeroDivisionError','_buil
d_class」'_debug」'_doc_',’__import」
der_','_name」'_package_J,'_spec」'abs','all
'any','ascii','bin','bool*,'bytearray','bytes','callabl
e'z'chr*,'classmethod','compile','complex','copyrig
ht\'credits','delattr','diet','dir';'divmod','enumera
te\'eval','exec\'exit','filter','float';'format','frozen
set\'getattr','globals','hasattr';'hash','help','hex','
;
id'z'input','int''isinstance','issubclass','iter','len',1i
cense','list','locals','map','max','memoryview','mi
n','next','object','oct','open','ord'z'pow'z'print',*pr
operty'z'quit','range',Yepr','reversed','round','set',
'setattr','slice','sorted','staticmethod','str','sum','s
uper','tuple','type','vars*,'zip']
4.3.查看某個函數(shù)的文檔幫助信息
可以用函數(shù)help(函數(shù))來查看某個函數(shù)的文檔幫助信息。
例子:
>>>help(sum)
Helponbuilt-infunctionsuminmodulebuiltins:
sum(iterable,start=0,/)
Returnthesumofa'start*value(default:0)pl
usaniterableofnumbersWhentheiterableise
mpty,returnthestartvalue.
Thisfunctionisintendedspecificallyforuse
withnumericvaluesandmayrejectnon-numerict
ypes.
可以直接在提示符下輸入help(),然后輸入某個模塊或函數(shù)名得到詳細的幫
助信息。
5.接口
CGI目前由NCSA維護,NCSA定義CGI如下:
CGI(CommonGatewayInterface),通用網(wǎng)關(guān)接口,它是一段程序,運行
在服務(wù)器上如:HTTP服務(wù)器,提供同客戶端HTML頁面的接口。
CGI程序可以是Python腳本、Perl腳本、Shell腳本、C或者C++程序等。
5.1.服務(wù)器
在你進行CGI編程前,確保您的Web服務(wù)器支持CGI及已經(jīng)配置了CGI
的處理程序。
所有的HTTP服務(wù)器執(zhí)行CGI程序都保存在一個預先配置的目錄。這個目
錄被稱為CGI目錄,并按照慣例,它被命名為/var/www/cgi-bin目錄。
CGI文件的擴展名為.cgi,python也可以使用.py擴展名。
默認情況下,Linux服務(wù)器配置運行的cgi-bin目錄中為/var/www。
如果想指定的其他運行CGI腳本的目錄,可以修改httpd.conf配置文件,
如下所示:
<Directory"/var/www/cgi-bin">
AllowOverrideNone
OptionsExecCGI
Orderallowzdeny
Allowfromall
</Directory>
<Directory"/var/www/cgi-bin">
OptionsAll
</Directory>
5.2.程序
使用Python創(chuàng)建第一個CGI程序,文件名為hello.py,文件位于
/var/www/cgi-bin目錄中,內(nèi)容如下,修改文件的權(quán)限為755:[7]
#!/usr/bin/envpython
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head>")
print("")
print("</head>n)
print("<body>")
print("<h2>HelloWorld!ThisismyfirstCGIpr
ogram</h2>")
print("</body>n)
oprint("</html>")
以上程序在瀏覽器訪問顯示結(jié)果如下:
HelloWorld!ThisismyfirstCGIprogram
這個的hello.py腳本是一個簡單的Python腳本,腳本第一的輸出內(nèi)容
"C。ntent-type:text/html\r\n\r\n”發(fā)送到瀏覽器并告知瀏覽器顯示的內(nèi)容類型
為"text/html"。
5.3.環(huán)境變量
所有的CGI程序都接收以下的環(huán)境變量,這些變量在CGI程序中發(fā)揮了重
要的作用:
變量名描述
CONTE這個環(huán)境變量的值指示所傳遞來的信息的MIME類型。目前,環(huán)境變量CONT
NT_TYPENT_TYPE一般都是:application/x-www-form-urlencoded他表示UJg來
E自于HTML表單。
CONTE如果服務(wù)器與CGI程序信息的傳遞方式是POST,這個環(huán)境變量即使從標準輸
NT.LEN入STDIN中可以讀到的有效數(shù)據(jù)的字節(jié)數(shù)。這個環(huán)境變量在讀取所輸入的數(shù)據(jù)
GTH時必須使用。
HTTP_C
客戶機內(nèi)的COOKIE內(nèi)容。
OOKIE
HTTP_U
SER.AG提供包含了版本數(shù)或其他專有數(shù)據(jù)的客戶瀏覽器信息。
ENT
PATII-I這個環(huán)境變量的值表示緊接在CGI程序名之后的其他路徑信息。它常常作為C
NFOGI程序的參數(shù)出現(xiàn)。
QUERY.如果服務(wù)器與CGI程序信息的傳遞方式是GET,這個環(huán)境變量的值即使所傳遞
STRING的信息。這個信息經(jīng)跟在CGI程序名的后面,兩者中間用一個問號?分隔。
這個環(huán)境變量的值是發(fā)送請求的客戶機的IP地址,例如上面的7.
REMOT
這個值總是存在的。而且它是Web客戶機需要提供給Web服務(wù)器的唯一標識,
E_ADDR
可以在CGI程序中用它來區(qū)分不同的Web客戶機。
REMOT這個環(huán)境變量的值包含發(fā)送CGI請求的客戶機的主機名。如果不支持你想查詢,
E-HOST則無需定義此環(huán)境變量。
REQUES
提供腳本被調(diào)用的方法。對于使用HTTP/1.0協(xié)議的腳本,僅GET和POST
T_METH
有意義。
0D
SCRIPT_
FILENACGI腳本的完整路徑
ME
SCRIPT.
CGI腳本的的名稱
NAME
SERVER
這是你的WEB服務(wù)器的主機名、別名或IP地址。
_NAME
SERVER
這個環(huán)境變量的值包含了調(diào)用CGI程序的HTTP服務(wù)器的名稱和版本號。例如,
_SOFTW
上面的值為Apache/2.2.14(Unix)
ARE
以下是一個簡單的CGI腳本輸出CGI的環(huán)境變量:
#!/usr/bin/python
importos
print"Content-type:text/html\r\n\r\n"
print"Environment"
forparaminos.environ.keysQ:
print"<b>%20s</b>:%s<\br>"%(param,os.e
nviron[param])
6.應(yīng)用領(lǐng)域
Python是一種解釋型腳本語言,可以應(yīng)用于以下領(lǐng)域:
?Web和Internet開發(fā)
?科學計算和統(tǒng)計
?人工智能
?桌面界面開發(fā)
?軟件開發(fā)
?后端開發(fā)
?網(wǎng)絡(luò)接口:能方便進行系統(tǒng)維護和管理,Linux下標志性語言之一,
是很多系統(tǒng)管理員理想的編程工具。
圖形處理:有PIL、Tkinter等圖形庫支持,能方便進行圖形處理。
數(shù)學處理:NumPy擴展提供大量與許多標準數(shù)學庫的接口。
文本處理:python提供的re模塊能支持正則表達式,還提供SGML,XML
分析模塊,許多程序員利用python進行XML程序的開發(fā)。
數(shù)據(jù)庫編程:程序員可通過遵循PythonDB-API(應(yīng)用程序編程接口)規(guī)
范的模塊與MicrosoftSQLServer,Oracle,Sybase,DB2,MySQL、SQLite
等數(shù)據(jù)庫通信。python自帶有一個Gadfly模塊提供了一個完整的SQL環(huán)境。
網(wǎng)絡(luò)編程:提供豐富的模塊支持sockets編程,能方便快速地開發(fā)分布式應(yīng)
用程序。很多大規(guī)模軟件開發(fā)計劃例如Zope,Mnet及BitTorrent.Google都
在廣泛地使用它。
Web編程:應(yīng)用的開發(fā)語言,支持最新的XML技術(shù)。
多媒體應(yīng)用:Python的PyOpenGL模塊封裝了"OpenGL應(yīng)用程序編程
接口",能進行二維和三維圖像處理。PyGame模塊可用于編寫游戲軟件。
pymo引擎PYMO全稱為pythonmemoriesoff是一款運行于Symbian
系統(tǒng)上的游戲引擎。因其
S60V3,Symbian3,S60v5,Symbian3zAndroidAVG
基于python2.0平臺開發(fā),并且適用于創(chuàng)建秋之回憶(memoriesoff)風格的
AVG游戲,故命名為PYMO。
黑客編程:python有一個hack的庫,內(nèi)置了你熟悉的或不熟悉的函數(shù),但
是缺少成就感。
用Python寫簡單爬蟲
首先,要通過urllib2這個Module獲得對應(yīng)的HTML源碼。(PS:在
python3.3之后urllib2已經(jīng)不能再用,代之以urllib)
importurllib2#調(diào)用urllib2
lirl='http:〃/s?wd=cloga'#把等號右邊的
網(wǎng)址賦值給url
html=urllib2.urlopen(url).read()#html隨意取
名等號后面的動作是打開源代碼頁面,并閱讀
printhtml#打印
通過上面這三句就可以將URL的源碼存在content變量中,其類型為字符
型。
接下來是要從這堆HTML源碼中提取我們需要的內(nèi)容。用Chrome查看一
下對應(yīng)的內(nèi)容的代碼(也可以用Firefox的Firebug\
可以看到url的信息存儲在span標簽中,要獲取其中的信息可以用正則表
達式。
7.開發(fā)工具
>Tkinter
Python默認的圖形界面接口。Tkinter是一個和Tk接口的Python模塊,
Tkinter庫提供了對TkAPI的接口,它屬于Tcl/Tk的GUI工具組。
>PyGTK
用于pylhonGUI程序開發(fā)的GTK+庫。GTK就是用來實現(xiàn)GIMP和Gnome
的庫。
>PyQt
用于python的Qt開發(fā)庫。QT就是實現(xiàn)了KDE環(huán)境的那個庫,由一系列
的模塊,有qt,qtcanvas,qtgl,qtnetwork,qtsql,qttable,qtuiandqtxml,
包含有300個類和超過5750個的函數(shù)和方法。PyQt還支持一個叫qtext的模
塊,它包含一個QScintilla庫。該庫是Scintillar編輯器類的Qt接口。
>wxPython
GUI編程框架,熟悉MFC的人會非常喜歡,簡直是同一架構(gòu)(對于初學者
或者對設(shè)計要求不高的用戶來說,使用BoaConstructor可以方便迅速的進行
wxPython的開發(fā))屬于外置庫,要先下載。
>PIL
python提供強大的圖形處理的能力,并提供廣泛的圖形文件格式支持,該
庫能進行圖形格式的轉(zhuǎn)換、打印和顯示。還能進行一些圖形效果的處理,如圖形
的放大、縮小和旋轉(zhuǎn)等。是Python用戶進行圖象處理的強有力工具。
>Psyco
一個Python代碼加速度器,可使Python代碼的執(zhí)行速度提高到與編譯語
言一樣的水平。
>xmpppy
Jabber服務(wù)器采用開發(fā)的XMPP協(xié)議,GoogleTalk也是采用XMPP協(xié)議
的IM系統(tǒng)。在Python中有一個xmpppy模塊支持該協(xié)議。也就是說,我們可
以通過該模塊與Jabber服務(wù)器通信,是不是很Cool。
>PyMedia
用于多媒體操作的python模塊。它提供了豐富而簡單的接口用于多媒體處
理可在和平臺下
(wav,mp3,ogg,avi,divx,dvd,cddaetc)0WindowsLinux
使用。
>Pmw
Pythonmegawidgets,Python超級GUI組件集,一個在python中利用
Tkinter模塊構(gòu)建的高級GUI組件,每個Pmw都合并了一個或多個Tkinter組
件,以實現(xiàn)更有用和更復雜的功能。
>PyXML
用Python解析和處理XML文檔的工具包,包中的4D0M是完全相容于
W3CDOM規(guī)范的。它包含以下內(nèi)容:
xmlproc:一個符合規(guī)范的XML解析器。Expat:T快速的非驗證的XML
解析器。還有其他和他同級別的還有PyHtmlPySGML。
>PyGame
用于多媒體開發(fā)和游戲軟件開發(fā)的模塊??梢灾苯邮褂胮ipinstallpygame
下載
>PyOpenGL
模塊封裝了"OpenGL應(yīng)用程序編程接口",通過該模塊python程序員可
在程序中集成2D和3D的圖形。
、
>NumPyNumArray%SAGE
NumArray是Python的一個擴展庫,主要用于處理任意維數(shù)的固定類型數(shù)
組,簡單說就是一個矩陣庫。它的底層代碼使用C來編寫,所以速度的優(yōu)勢很
明顯。SAGE是基于NumPy和其他幾個工具所整合成的數(shù)學軟件包,目標是取
代Magma,Maple,Mathematica和Matlab這類工具。
>MySQLdb
用于連接MySQL數(shù)據(jù)庫。還有用于zope的ZMySQLDA模塊,通過它就
可在zope中連接mysql數(shù)據(jù)庫。
>Sqlite3
用于連接sqlite數(shù)據(jù)庫。
>Python-ldap
提供一組面向?qū)ο蟮腁PI,可方便地在python中訪問Id叩目錄服務(wù),它
基于OpenLDAP2.x。
>smtplib
發(fā)送電子郵件。
>ftplib
定義了FTP類和一些方法,用以進行客戶端的ftp編程。如果想了解ftp協(xié)
議的詳細內(nèi)容,請參考RFC959。
>PyOpenCL
OpenCL的Python接口,通過該模塊可以使用GPU實現(xiàn)并行計算。
>xes-lib
學而思庫可用于發(fā)送郵件、查看天氣等功能。
8.標準庫
Python擁有一個強大的標準庫。Python語言的核心只包含數(shù)字、字符串、
列表、字典、文件等常見類型和函數(shù),而由Python標準庫提供了系統(tǒng)管理、網(wǎng)
絡(luò)通信、文本處理、數(shù)據(jù)庫接口、圖形系統(tǒng)、XML處理等額外的功能。Python
標準庫命名接口清晰、文檔良好,很容易學習和使用。
Python社區(qū)提供了大量的第三方模塊,使用方式與標準庫類似。它們的功
能無所不包,覆蓋科學計算、Web開發(fā)、數(shù)據(jù)庫接口、圖形系統(tǒng)多個領(lǐng)域,并
且大多成熟而穩(wěn)定。第三方模塊可以使用Python或者C語言編寫。SWIG,SIP
常用于將C語言編寫的程序庫轉(zhuǎn)化為Python模決。BoostC++Libraries包含
了一組庫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八下期末考拔高測試卷(3)(解析版)
- 《色彩的聯(lián)想》課件
- 《廉政專題教育講座》課件
- 教育培訓行業(yè)前臺接待總結(jié)
- 樂器店前臺崗位職責總結(jié)
- 2023年-2024年員工三級安全培訓考試題附答案【預熱題】
- 2023年-2024年安全管理人員安全教育培訓試題及答案典型題
- 2023年-2024年項目部治理人員安全培訓考試題及答案高清
- 1994年安徽高考語文真題及答案
- 1993年福建高考語文真題及答案
- 海域使用分類體系(全)
- 魯教版必修一第二單元第二節(jié)大氣運動——熱力環(huán)流(共28張PPT)
- 解除限制消費申請書
- 汽車整車廠和動力總成廠房火災(zāi)危險性分類
- 7實用衛(wèi)生統(tǒng)計學總-國家開放大學2022年1月期末考試復習資料-護理本復習資料
- 精品資料(2021-2022年收藏)集團各控股子公司董事會議事規(guī)則
- t-橋式起重機設(shè)計計算書
- 全口義齒印模及頜位關(guān)系記錄ppt課件
- 定點洗車協(xié)議書(共2頁)
- 電除塵器計算
- 桿塔選型(高度、形式、基礎(chǔ))
評論
0/150
提交評論