1、Python基礎(chǔ)知識(shí)
python簡(jiǎn)介
Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。
Python 的設(shè)計(jì)具有很強(qiáng)的可讀性,相比其他語(yǔ)言經(jīng)常使用英文關(guān)鍵字,其他語(yǔ)言的一些標(biāo)點(diǎn)符號(hào),它具有比其他語(yǔ)言更有特色語(yǔ)法結(jié)構(gòu)。
Python 是一種解釋型語(yǔ)言: 這意味著開(kāi)發(fā)過(guò)程中沒(méi)有了編譯這個(gè)環(huán)節(jié)。類似于PHP和Perl語(yǔ)言。
Python 是交互式語(yǔ)言: 這意味著,您可以在一個(gè)Python提示符,直接互動(dòng)執(zhí)行寫(xiě)你的程序。
Python 是面向?qū)ο笳Z(yǔ)言: 這意味著Python支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對(duì)象的編程技術(shù)。
Python 是初學(xué)者的語(yǔ)言:Python 對(duì)初級(jí)程序員而言,是一種偉大的語(yǔ)言,它支持廣泛的應(yīng)用程序開(kāi)發(fā),從簡(jiǎn)單的文字處理到 WWW 瀏覽器再到游戲。
Python 發(fā)展歷史
Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷蘭國(guó)家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究所設(shè)計(jì)出來(lái)的。
Python 本身也是由諸多其他語(yǔ)言發(fā)展而來(lái)的,這包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的腳本語(yǔ)言等等。
像 Perl 語(yǔ)言一樣,Python 源代碼同樣遵循 GPL(GNU General Public License)協(xié)議。
現(xiàn)在 Python 是由一個(gè)核心開(kāi)發(fā)團(tuán)隊(duì)在維護(hù),Guido van Rossum 仍然占據(jù)著至關(guān)重要的作用,指導(dǎo)其進(jìn)展。
Python 特點(diǎn)
1.易于學(xué)習(xí):Python有相對(duì)較少的關(guān)鍵字,結(jié)構(gòu)簡(jiǎn)單,和一個(gè)明確定義的語(yǔ)法,學(xué)習(xí)起來(lái)更加簡(jiǎn)單。
2.易于閱讀:Python代碼定義的更清晰。
3.易于維護(hù):Python的成功在于它的源代碼是相當(dāng)容易維護(hù)的。
4.一個(gè)廣泛的標(biāo)準(zhǔn)庫(kù):Python的最大的優(yōu)勢(shì)之一是豐富的庫(kù),跨平臺(tái)的,在UNIX,Windows和Macintosh兼容很好。
5.互動(dòng)模式:互動(dòng)模式的支持,您可以從終端輸入執(zhí)行代碼并獲得結(jié)果的語(yǔ)言,互動(dòng)的測(cè)試和調(diào)試代碼片斷。
6.可移植:基于其開(kāi)放源代碼的特性,Python已經(jīng)被移植(也就是使其工作)到許多平臺(tái)。
7.可擴(kuò)展:如果你需要一段運(yùn)行很快的關(guān)鍵代碼,或者是想要編寫(xiě)一些不愿開(kāi)放的算法,你可以使用C或C++完成那部分程序,然后從你的Python程序中調(diào)用。
8.數(shù)據(jù)庫(kù):Python提供所有主要的商業(yè)數(shù)據(jù)庫(kù)的接口。
9.GUI編程:Python支持GUI可以創(chuàng)建和移植到許多系統(tǒng)調(diào)用。
10.可嵌入: 你可以將Python嵌入到C/C++程序,讓你的程序的用戶獲得"腳本化"的能力。
Python 版本區(qū)別
2020 年 1 月 1 日,Python 官方終止了對(duì) Python 2.7 版本(最后一個(gè) Python 2.x 版本) 的支持,這意味著開(kāi)發(fā)者不會(huì)在接收到任何來(lái)自 Python 2.7 的錯(cuò)誤修復(fù)或安全更新。自此 Python 2 完全退休,Python 3 時(shí)代正式來(lái)臨。
盡管 Python 2 已退出歷史舞臺(tái) ,但國(guó)內(nèi)外一些互聯(lián)網(wǎng)公司仍在使用 Python 2.7 開(kāi)發(fā)程序,同時(shí)為了讓大家更好地了解 Python 3 ,我們非常有必要知道這兩個(gè)版本間存在區(qū)別。
你也許會(huì)問(wèn),為什么終止支持了,還會(huì)有公司再使用?其實(shí),版本的更換是一項(xiàng)龐大、復(fù)雜的工作,一些小型的互聯(lián)網(wǎng)公司在人力、財(cái)力不足的情況下,只能要繼續(xù)使用低版本的 Python,只有萬(wàn)不得已時(shí)才會(huì)更新版本。
和 Python 2.x 版本相比,Python 3.x 版本在語(yǔ)句輸出、編碼、運(yùn)算和異常等方面做出了一些調(diào)整,本節(jié)就對(duì)這些調(diào)整逐一地做簡(jiǎn)單介紹。
注意:本節(jié)適合有 Python 基礎(chǔ)的學(xué)員閱讀,初學(xué)者可先跳過(guò)本節(jié),建議整體學(xué)完 Python 后,再回過(guò)頭來(lái)閱讀本文。
Python 3.x print()函數(shù)代替了print語(yǔ)句
在 Python 2.x 中,輸出數(shù)據(jù)使用的是 print 語(yǔ)句:
>>> print "3,4"
3,4
或者
>>> print(3,4)
(3,4)
但是在 Python 3.x 中,print 語(yǔ)句沒(méi)有了,取而代之的是 print() 函數(shù),例如:
>>> print(3,4)
3 4
如果還像 Python 2.x 中那樣使用 print 語(yǔ)句,Python 編譯器就會(huì)報(bào)錯(cuò),例如:
>>> print "3,4"
File "<stdin>", line 1
print "3,4"
^
SyntaxError: Missing parentheses in call to 'print'
Python 3.x 默認(rèn)使用 UTF-8 編碼
Python 2.x 默認(rèn)采用的 ASCII 編碼,而 Python 3.x 默認(rèn)使用 UTF-8 編碼,相比來(lái)說(shuō),UTF-8 編碼可以很好地支持中文或其它非英文字符。
例如,輸出一句中文,使用 Python 2.x 和 Python 3.x 的區(qū)別如下:
#Python 2.x
>>>str ="C語(yǔ)言中文網(wǎng)"
>>>str
'C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91'
#Python 3.x
>>>str ="C語(yǔ)言中文網(wǎng)"
>>>str
'C語(yǔ)言中文網(wǎng)'
不僅如此,在 Python 3.x 中,下面的代碼也是合法的:
>>>中國(guó)="China"
>>>print(中國(guó))
China
Python 3.x 除法運(yùn)算
和其他語(yǔ)言相比,Python 的除法運(yùn)算要高端很多,它的除法運(yùn)算包含 2 個(gè)運(yùn)算符,分別是 / 和 //,這 2 個(gè)運(yùn)算符在 Python 2.x 和 Python 3.x 的使用方法如下:
/ 運(yùn)算符
在 Python 2.x 中,使用運(yùn)算符 / 進(jìn)行除法運(yùn)算的方式和 Java、C 語(yǔ)言類似,整數(shù)相除的結(jié)果仍是一個(gè)整數(shù),浮點(diǎn)數(shù)除法會(huì)保留小數(shù)點(diǎn)部分,例如:
>>>1/2
0
>>>1.0/2
0.5
但是在 Python 3.x 中使用 / 運(yùn)算符,整數(shù)之間做除法運(yùn)算,結(jié)果也會(huì)是浮點(diǎn)數(shù)。例如:
>>>1/2
0.5
運(yùn)算符 //
使用運(yùn)算符 // 進(jìn)行的除法運(yùn)算叫做 floor 除法(“地板除”),也就是輸出不大于結(jié)果值的一個(gè)最大的整數(shù)(向下取整)。此運(yùn)算符的用法在 Python 2.x 和Python 3.x 中是一樣的,舉個(gè)例子:
#Python 2.x
>>> -1//2
-1
#Python 3.x
>>> -1//2
-1
Python 3.x 異常
在 Python 3.x 版本中,異常處理改變的地方主要在以下幾個(gè)方面:
在 Python 2.x 版本中,所有類型的對(duì)象都是直接被拋出的,但是在 Python 3.x 版本中,只有繼承 BaseException 的對(duì)象才可以被拋出。
在 Python 2.x 版本中,捕獲異常的語(yǔ)法是“except Exception,var:”;但在 Python 3.x 版本中,引入了 as 關(guān)鍵字,捕獲異常的語(yǔ)法變更為 “except Exception as var:”。
在 Python 3.x 版本中,處理異常用 “raise Exception(args)”代替了“raise Exception,args”。
Python 3.x 版本中,取消了異常類的序列行為和 .message 屬性。
有關(guān) Python 2.x 版本和 Python 3.x 版本處理異常的示例代碼如下所示:
#Python 2.x
>>> try:
... ?raise TypeError,"類型錯(cuò)誤"
... except TypeError,err:
... ?print err.message
...
類型錯(cuò)誤
#Python 3.x
>>> try:
... ? ? raise TypeError("類型錯(cuò)誤")
... except TypeError as err:
... ? ? print(err)
...
類型錯(cuò)誤
Python 3.x 八進(jìn)制字面量表示
在 Python 3.x 中,表示八進(jìn)制字面量的方式只有一種,并且必須寫(xiě)成“0o1000”這樣的方式,原來(lái)“01000”的方式不能使用了。舉個(gè)例子:
#Python 2.x
>>> 0o1000
512
>>> 01000
512
#Python 3.x
>>> 01000
File "<stdin>", line 1
01000
^
SyntaxError: invalid token
>>> 0o1000
512
Python 3.x 不等于運(yùn)算符
Python 2.x 中的不等于運(yùn)算符有 2 種寫(xiě)法,分別為 != 和 <>,但在 Python 3.x 中去掉了 <>,只有 != 這一種寫(xiě)法,例如:
#Python 2.x
>>> 1!=2
True
>>> 1<>2
True
#Python 3.x
>>> 1!=2
True
>>> 1<>2
File "<stdin>", line 1
1<>2
^
SyntaxError: invalid syntax
Python 3.x 輸入差異
Python 2.x 中提供兩種類型輸入函數(shù),分別是 input() 和 raw_input(),前者默認(rèn)返回的 int(整數(shù)類型) 類型,而后者總是返回 str(字符串類型);Python 3.x 中只提供了一個(gè)輸入函數(shù) input(),該函數(shù)的使用方法與 raw_input() 相似,總是返回 str ?類型。示例如下:
Python 2.x a=input("請(qǐng)輸出:") 請(qǐng)輸出:123 >>> type(a) <type 'int'> b=input("請(qǐng)輸入") 請(qǐng)輸出:"C語(yǔ)言中文網(wǎng)" >>> type(b) <type 'str'> c=raw_input("請(qǐng)輸入:") 請(qǐng)輸入:123 >>>type(c) <type 'str'> # Python3.x >>> d=input("請(qǐng)輸入:") 請(qǐng)輸入:123 >>> d '123' >>> type(d) <class 'str'>
Python 3.x 數(shù)據(jù)類型
Python 3.x 中對(duì)數(shù)據(jù)類型也做了改動(dòng),比如說(shuō):
Python 3.x 去除了 long 類型,現(xiàn)在只有一種整形 int,但它的行為就像是 Python 2.x 版本中的 long。
Python 3.x 新增了 bytes 類型,對(duì)應(yīng) Python 2.x 版本的八位串,定義 bytes 字面量的方法如下所示:>>>b=b'China'
>>>type(b)
<type 'bytes'>字符串對(duì)象和 bytes 對(duì)象可以使用 .encode() 或者 .decode()方法相互轉(zhuǎn)化,例如:>>>s=b.decode()
>>>s
'China'
>>>b1=s.encode()
>>>b1
b'China'Python 3.x 中,字典的 keys()、items() 和 values() 方法用返回迭代器,且之前的 iterkeys() 等函數(shù)都被廢棄,同時(shí)去掉的還有 dict.has_key(),改為用 in 替代。