網(wǎng)站性能檢測評分
注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。
python是學(xué)什么的
Python哪個版本適合初學(xué)者 推廣視頻課程
想學(xué)習(xí)Python的人都會有一個困惑,那就是Python目前有兩個版本Python2和Python3,Python2與Python3有何區(qū)別,兩個版本該學(xué)習(xí)哪個呢?
python3 和 python2 是不兼容的,而且差異比較大,python3是不向下兼容的,但是絕大多數(shù)組件和擴(kuò)展都是基于python2的。目前實(shí)際應(yīng)用中大部分暫不考慮 Python3,有的時候注意寫兼容 2/3 的代碼。用 Python2 為主的寫新代碼時要考慮以后遷移到 Python3 的可能性。據(jù)數(shù)據(jù)統(tǒng)計顯示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。
其實(shí)python是linux上最常用的軟件之一,但是linux目前的版本大部分還是使用python2的,而且,在linux上依賴python2的程序更多一些,所以 Python3 要代替 python2 成為主流還需要幾年的時間。如果為了找工作還是學(xué)Python 2,學(xué)會了Python 2,由Python 2轉(zhuǎn)到python3也不難。
說了半天,Python2與Python3到底有何區(qū)別呢?
1.性能
Py3.0運(yùn)行 pystone benchmark的速度比Py2.5慢30%。Guido認(rèn)為Py3.0有極大的優(yōu)化空間,在字符串和整形操作上可以取得很好的優(yōu)化結(jié)果。
Py3.1性能比Py2.5慢15%,還有很大的提升空間。
2.編碼
Py3.X源碼文件默認(rèn)使用utf-8編碼
3. 語法
1)去除了<>,全部改用!=
2)去除``,全部改用repr()
3)關(guān)鍵詞加入as 和with,還有True,False,None
4)整型除法返回浮點(diǎn)數(shù),要得到整型結(jié)果,請使用//
5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全局)變量
6)去除print語句,加入print()函數(shù)實(shí)現(xiàn)相同的功能。同樣的還有 exec語句,已經(jīng)改為exec()函數(shù)
7)改變了順序操作符的行為,例如x 8)輸入函數(shù)改變了,刪除了raw_input,用input代替: 9)去除元組參數(shù)解包。不能def(a, (b, c)):pass這樣定義函數(shù)了 10)新式的8進(jìn)制字變量,相應(yīng)地修改了oct()函數(shù)。 11)增加了 2進(jìn)制字面量和bin()函數(shù) 12)擴(kuò)展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求兩點(diǎn):rest是list 對象和seq是可迭代的。 13)新的super(),可以不再給super()傳參數(shù), 14)新的metaclass語法: 15)支持class decorator。 4. 字符串和字節(jié)串 1)現(xiàn)在字符串只有str一種類型,但它跟2.x版本的unicode幾乎一樣。 2)關(guān)于字節(jié)串,請參閱“數(shù)據(jù)類型”的第2條目 5.數(shù)據(jù)類型 1)Py3.X去除了long類型,現(xiàn)在只有一種整型——int,但它的行為就像2.X版本的long 2)新增了bytes類型 6.面向?qū)ο?/p> 1)引入抽象基類(Abstraact Base Classes,ABCs)。 2)容器類和迭代器類被ABCs化,所以cellections模塊里的類型比Py2.5多了很多。 3)迭代器的next()方法改名為__next__(),并增加內(nèi)置函數(shù)next(),用以調(diào)用迭代器的 4)增加了@abstractmethod和 @abstractproperty兩個 decorator,編寫抽象方法(屬性)更加方便。 7.異常 1)所以異常都從 BaseException繼承,并刪除了StardardError 2)去除了異常類的序列行為和.message屬性 3)用 raise Exception(args)代替 raise Exception, args語法 4)捕獲異常的語法改變,引入了as關(guān)鍵字來標(biāo)識異常實(shí)例 5)異常鏈,因?yàn)開_context__在3.0a1版本中沒有實(shí)現(xiàn) 8.模塊變動1)移除了cPickle模塊,可以使用pickle模塊代替。最終我們將會有一個透明高效的模塊。 2)移除了imageop模塊 3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, imeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模塊 4)移除了bsddb模塊(單獨(dú)發(fā)布,可以從Python "bindings" for Oracle Berkeley DB獲取) 5)移除了new模塊 6)os.tmpnam()和os.tmpfile()函數(shù)被移動到tmpfile模塊下 7)tokenize模塊現(xiàn)在使用bytes工作。主要的入口點(diǎn)不再是generate_tokens,而是 tokenize.tokenize() 9.其它 1)xrange() 改名為range(),要想使用range()獲得一個list,必須顯式調(diào)用 2)bytes對象不能hash,也不支持 b.lower()、b.strip()和b.split()方法 3)zip()、map()和filter()都返回迭代器。 4)string.letters和相關(guān)的.lowercase和.uppercase被去除,請改用string.ascii_letters 等 5)如果x< y的不能比較,拋出TypeError異常 6)__getslice__系列成員被廢棄。 7)file類被廢棄
學(xué)Python要學(xué)那些東西,可以往什么方向發(fā)展 營銷視頻課程
學(xué)習(xí)Python的這幾天來,覺得Python還是比較簡單,容易上手的,就基本語法而言,但是有些高級特性掌握起來還是有些難度,需要時間去消化。Python給我最大的印象就是簡潔,這也正是我為什么要從Java轉(zhuǎn)行Python的原因之一。
一、Python簡介
ython實(shí)現(xiàn)強(qiáng)勢逆襲,而且我相信,隨著時間的推移,國內(nèi)Python語言未來前景也是一片向好。
Python的特點(diǎn)是優(yōu)雅簡單,易學(xué)易用(雖然我感覺還是有一些概念不容易理解),Python的哲學(xué)是盡量用最少的,最簡單易懂的代碼實(shí)現(xiàn)需要的功能。Python適宜于開發(fā)網(wǎng)絡(luò)應(yīng)用,腳本寫作,日常簡單小工具等等。Python的缺點(diǎn)是效率較低,但是在大量的場合效率卻不是那么重要或者說Python不是其性能瓶頸,所以不要太在意。其次是2.x-3.x的過渡使得許多3.x還缺少很多2.x下的模塊,不過也在完善中。其次就是源代碼無法加密,發(fā)布Python程序其實(shí)就是發(fā)布源代碼。
tiobe編程語言排行榜
一,函數(shù)
1.函數(shù)是對象,函數(shù)名即是指向?qū)?yīng)函數(shù)對象的引用,所以可以將函數(shù)名賦給一個變量,相當(dāng)于給函數(shù)起一個‘別名’。
2.Python函數(shù)可以返回”多個值“,之所以打引號,是因?yàn)閷?shí)際上返回的多個值拼成了一個元組,返回這個元組。
3.定義默認(rèn)參數(shù)需要牢記:默認(rèn)參數(shù)必須指向不變對象。否則第一次調(diào)用和第二次調(diào)用結(jié)果會不一樣,因?yàn)榭勺兊哪J(rèn)參數(shù)調(diào)用后改變了。
4.可變參數(shù):傳入的參數(shù)個數(shù)是可變的,可以是0個或多個。可變參數(shù)會將你傳入的參數(shù)自動組裝為一個tuple。在你傳入的list或tuple名字前加一個 * 即說明傳入的是可變參數(shù)。習(xí)慣寫法為*args。
5.關(guān)鍵字參數(shù):傳入0個或多個含參數(shù)名的參數(shù),這些參數(shù)被自動組裝成一個dict。習(xí)慣寫法**kw,如**a表示把a(bǔ)中所有的鍵值對以關(guān)鍵字參數(shù)的形式傳入kw,獲得一個dict,這個dict是a的一份拷貝,對kw改動不會傳遞到a
6.命名關(guān)鍵字在函數(shù)定義中跟在一個*分割符后c,d為命名關(guān)鍵字參數(shù),可以限制調(diào)用者可以傳入的參數(shù)名,同時可以提供默認(rèn)值
7.參數(shù)定義順序:必選參數(shù),默認(rèn)參數(shù),可變參數(shù)/命名關(guān)鍵字參數(shù),關(guān)鍵字參數(shù)。
8.切片操作格式為lis[首下標(biāo):尾下標(biāo):間隔],如果都不填,即lis[::]則代表整個容器lis
9.用圓括號()括起來一個列表生成式創(chuàng)建一個生成器generator,generator保存生成算法,我們可以用next(g)取得生成器g的下一個返回值。生成器的好處就是我們不需要提前生成所有列表元素,而是需要時再生成,這在某些情況下可以節(jié)省許多內(nèi)存。算法也可以不是列表生成式而是自定義函數(shù),只需在函數(shù)定義中包含yield關(guān)鍵字。
10.map()和reduce(): 二者都是高階函數(shù)。map()接收兩個參數(shù),一個是函數(shù),一個是Iterable序列,map將傳入的函數(shù)依次作用在序列每一個元素上,并把結(jié)果作為新的Iterator返回。reduce()類似累積計算版的map(),把一個函數(shù)作用在一個序列上,每次接收兩個參數(shù),將結(jié)果繼續(xù)與序列的下一個元素做累積計算。
利用map和reduce編寫一個str2float函數(shù),如把字符串'123.456'轉(zhuǎn)換成浮點(diǎn)數(shù)123.456:
11.fliter()函數(shù)過濾序列,類似于map()作用于每一元素,根據(jù)返回值是True或者False決定舍棄還是保留該元素。函數(shù)返回一個Iterator。
12.sorted()函數(shù)可實(shí)現(xiàn)排序,類似于C++庫中的sort()函數(shù),但是比其更加簡潔,語法為sorted(lis,key=func,reverse=T/F)
key函數(shù)可實(shí)現(xiàn)自定義的排序規(guī)則,reverse表示升序還是降序。
13.一個函數(shù)可以返回一個函數(shù),但是返回時該函數(shù)并未執(zhí)行,所以返回函數(shù)中不要引用任何可能發(fā)生變化的變量,否則會出現(xiàn)邏輯錯誤。
14.裝飾器(decorator): 當(dāng)需要增強(qiáng)函數(shù)的功能卻不希望修改函數(shù)本身,那么可以采用裝飾器這種運(yùn)行時動態(tài)增加功能的方式,增加的功能卸載裝飾器函數(shù)中。如在執(zhí)行前后打印'begin call'和'end call',可以這樣做:
二,基礎(chǔ)
1.如果一個字符串中有許多需要轉(zhuǎn)義的字符,而又不想寫那么多'',那么可以用 r'...' 表示 '...'內(nèi)的內(nèi)容不轉(zhuǎn)義。
2.Python的邏輯運(yùn)算and, or, not 分別對應(yīng)C語言中的&&, ||, !.
3.Python的整數(shù)與浮點(diǎn)數(shù)大小都沒有范圍。
4.Python中除法有兩種: '/'除出來必是浮點(diǎn)數(shù), '//'除出來是整數(shù),即地板除。
5.Python中一切皆引用。每個對象都有一個引用計數(shù)器(內(nèi)部跟蹤變量)進(jìn)行跟蹤,引用計數(shù)值表示該對象有多少個引用,當(dāng)初次產(chǎn)生賦給變量時,引用計數(shù)為1,其后沒進(jìn)行下列行為中的任意一種都會增加引用計數(shù)
6.深拷貝與淺拷貝的概念與對比,有點(diǎn)復(fù)雜,看這篇文章
7.list,tuple和dict,set
list: 為列表,是一個有序集合,類似于數(shù)組但又比數(shù)組功能強(qiáng)大,可以隨時append,pop元素,下標(biāo)從0開始,且下標(biāo)為加n模n制,即lis[-1] = lis[len-1],下標(biāo)范圍[-len,len-1].
tuple:為元組,類似于list,但list為可變類型,而tuple不可變,即沒有append,pop等函數(shù)。一個建議是為了安全起見,能用tuple代替list盡量用tuple。如果tuple只有一個元素,要寫成如(1,)以避免歧義。
dict:字典類型,存放key-value鍵值對,可以根據(jù)key迅速地找出value,當(dāng)然,key必須是不可變類型
三,面向?qū)ο缶幊?/p>
1.Python實(shí)例變量可以自由地綁定任何屬性
2.為了不讓內(nèi)部屬性不被外部訪問,在屬性的名稱前加上兩個下劃線__,這樣就變成了一個私有變量(private),注意,不能直接訪問不代表一定不能訪問,事實(shí)上,加雙下劃線后Python就會將其改名為‘_class名__name’,所以還是可以這樣來訪問這個‘私有’變量。
3.對于靜態(tài)語言,如果要求傳入一個class類型的對象,那么傳入的對象必須是class類型或者其子類,否則將無法調(diào)用class中的方法,而Python這樣的動態(tài)語言有‘鴨子類型’一說,即不一定要傳入class類型或其子類,而只要保證傳入的對象中有要使用的方法即可。
4.如果想要限制實(shí)例可以綁定的屬性,那么在定義class時定義一個__slots__變量即可。
5.@ property裝飾器可以使一個getter方法變成屬性,如果方法名為me,那么@me.setter裝飾器則可使一個setter方法變成屬性。這樣可以使代碼更簡短,同時可對參數(shù)進(jìn)行必要的檢查。注意,__slots__限制的屬性對當(dāng)前類實(shí)例起完全限制作用,且與子類共同定義其__slots__,也就是說子類可以定義自己的__slots__,子類實(shí)例允許定義的屬性就是自身的__slots__加上父類的__slots__,即并集。
6.通過多重繼承,可使子類擁有多個父類的所有功能。
7.在類中__call__方法可使實(shí)例對象像函數(shù)那樣直接調(diào)用,作用即是該方法定義的過程。
8.ORM(Object Relational Mapping 對象關(guān)系映射),就是把關(guān)系數(shù)據(jù)庫的一行映射為一個對象,也就是一個類對應(yīng)一個表。ORM的實(shí)現(xiàn)需要通過metaclass元類修改類的定義。元類可以改變類創(chuàng)建時的行為。
四,IO編程
1.序列化: 把變量從內(nèi)存中變成可存儲或傳輸?shù)倪^程稱之為序列化。Python用pickle模塊實(shí)現(xiàn)序列化。序列化之后,就可以把序列化后的內(nèi)容存儲到磁盤上或者通過網(wǎng)絡(luò)進(jìn)行傳輸。pickle.dumps()將對象序列化成一個bytes,而pickle.loads()可以根據(jù)bytes反序列化出對象。
2.pickle雖好,但是它專為Python而生,所以要在不同語言間傳遞對象,最好還是xml或者json,而json表示格式是一個字符串,更易讀取,且比xml快,所以更加適宜于對象序列化。Python內(nèi)置了json模塊,相應(yīng)方法仍然是dumps()和loads()。
3.但是在默認(rèn)情況下,有些對象是無法序列化的,所以我們有時還需要定制轉(zhuǎn)換方法,告訴json該如何將某類對象轉(zhuǎn)換成可序列為json格式的{}對象。如下即是一個轉(zhuǎn)換方法:
五,調(diào)試
1.Python調(diào)試方法:
(1)直接打印
(2)斷言
(3)pdb
(4)IDE
想學(xué)習(xí)從事Python工作的請關(guān)注小編
Python哪個版本適合初學(xué)者 流量視頻課程
想學(xué)習(xí)Python的人都會有一個困惑,那就是Python目前有兩個版本Python2和Python3,Python2與Python3有何區(qū)別,兩個版本該學(xué)習(xí)哪個呢?
python3 和 python2 是不兼容的,而且差異比較大,python3是不向下兼容的,但是絕大多數(shù)組件和擴(kuò)展都是基于python2的。目前實(shí)際應(yīng)用中大部分暫不考慮 Python3,有的時候注意寫兼容 2/3 的代碼。用 Python2 為主的寫新代碼時要考慮以后遷移到 Python3 的可能性。據(jù)數(shù)據(jù)統(tǒng)計顯示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。
其實(shí)python是linux上最常用的軟件之一,但是linux目前的版本大部分還是使用python2的,而且,在linux上依賴python2的程序更多一些,所以 Python3 要代替 python2 成為主流還需要幾年的時間。如果為了找工作還是學(xué)Python 2,學(xué)會了Python 2,由Python 2轉(zhuǎn)到python3也不難。
說了半天,Python2與Python3到底有何區(qū)別呢?
1.性能
Py3.0運(yùn)行 pystone benchmark的速度比Py2.5慢30%。Guido認(rèn)為Py3.0有極大的優(yōu)化空間,在字符串和整形操作上可以取得很好的優(yōu)化結(jié)果。
Py3.1性能比Py2.5慢15%,還有很大的提升空間。
2.編碼
Py3.X源碼文件默認(rèn)使用utf-8編碼
3. 語法
1)去除了<>,全部改用!=
2)去除``,全部改用repr()
3)關(guān)鍵詞加入as 和with,還有True,False,None
4)整型除法返回浮點(diǎn)數(shù),要得到整型結(jié)果,請使用//
5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全局)變量
6)去除print語句,加入print()函數(shù)實(shí)現(xiàn)相同的功能。同樣的還有 exec語句,已經(jīng)改為exec()函數(shù)
7)改變了順序操作符的行為,例如x 8)輸入函數(shù)改變了,刪除了raw_input,用input代替: 9)去除元組參數(shù)解包。不能def(a, (b, c)):pass這樣定義函數(shù)了 10)新式的8進(jìn)制字變量,相應(yīng)地修改了oct()函數(shù)。 11)增加了 2進(jìn)制字面量和bin()函數(shù) 12)擴(kuò)展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求兩點(diǎn):rest是list 對象和seq是可迭代的。 13)新的super(),可以不再給super()傳參數(shù), 14)新的metaclass語法: 15)支持class decorator。 4. 字符串和字節(jié)串 1)現(xiàn)在字符串只有str一種類型,但它跟2.x版本的unicode幾乎一樣。 2)關(guān)于字節(jié)串,請參閱“數(shù)據(jù)類型”的第2條目 5.數(shù)據(jù)類型 1)Py3.X去除了long類型,現(xiàn)在只有一種整型——int,但它的行為就像2.X版本的long 2)新增了bytes類型 6.面向?qū)ο?/p> 1)引入抽象基類(Abstraact Base Classes,ABCs)。 2)容器類和迭代器類被ABCs化,所以cellections模塊里的類型比Py2.5多了很多。 3)迭代器的next()方法改名為__next__(),并增加內(nèi)置函數(shù)next(),用以調(diào)用迭代器的 4)增加了@abstractmethod和 @abstractproperty兩個 decorator,編寫抽象方法(屬性)更加方便。 7.異常 1)所以異常都從 BaseException繼承,并刪除了StardardError 2)去除了異常類的序列行為和.message屬性 3)用 raise Exception(args)代替 raise Exception, args語法 4)捕獲異常的語法改變,引入了as關(guān)鍵字來標(biāo)識異常實(shí)例 5)異常鏈,因?yàn)開_context__在3.0a1版本中沒有實(shí)現(xiàn) 8.模塊變動1)移除了cPickle模塊,可以使用pickle模塊代替。最終我們將會有一個透明高效的模塊。 2)移除了imageop模塊 3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, imeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模塊 4)移除了bsddb模塊(單獨(dú)發(fā)布,可以從Python "bindings" for Oracle Berkeley DB獲取) 5)移除了new模塊 6)os.tmpnam()和os.tmpfile()函數(shù)被移動到tmpfile模塊下 7)tokenize模塊現(xiàn)在使用bytes工作。主要的入口點(diǎn)不再是generate_tokens,而是 tokenize.tokenize() 9.其它 1)xrange() 改名為range(),要想使用range()獲得一個list,必須顯式調(diào)用 2)bytes對象不能hash,也不支持 b.lower()、b.strip()和b.split()方法 3)zip()、map()和filter()都返回迭代器。 4)string.letters和相關(guān)的.lowercase和.uppercase被去除,請改用string.ascii_letters 等 5)如果x< y的不能比較,拋出TypeError異常 6)__getslice__系列成員被廢棄。 7)file類被廢棄