漫談Python(1)

接上一篇 ?

PS: 在本篇中 你會(huì)了解到:

1.Python3.5 在Linux平臺(tái)上的安裝步驟?

2.Python3.5 與Python2.7 的區(qū)別


不一會(huì)兒, 小李又來找志強(qiáng)了,"師兄, 那個(gè)啥.....我是應(yīng)該安裝Python2.7還是Python3.5呢? 我在官網(wǎng)上看的版本說明看的頭大?"

志強(qiáng)聽了,說道:"我應(yīng)該學(xué)習(xí)哪個(gè)版本的Python烘跺。對于這個(gè)問題势似,對于初學(xué)者來說很常見. 我的回答是“先選擇一個(gè)最適合你的Python教程耳奕,教程中使用哪個(gè)版本的Python襟沮,你就用哪一個(gè)版本。教程的選取可以從書籍資料跪腹、教學(xué)視頻褂删、實(shí)例代碼這三個(gè)方面來參考。學(xué)得差不多了冲茸,再來研究不同版本之間的差別.? 大部分Python庫都同時(shí)支持Python 2.7.x和3.x版本的屯阀,所以不論選擇哪個(gè)版本都是可以的。但為了在使用Python時(shí)避開某些版本中一些常見的陷阱或需要移植某個(gè)Python項(xiàng)目時(shí)轴术,依然有必要了解一下Python兩個(gè)常見版本之間的主要區(qū)別不過既然你問了难衰,我也不妨給你解答一下 : "

Python3.5 與Python2.7 的區(qū)別


PS: 這里會(huì)簡單的敘述Python3.5 和Python2.7幾個(gè)比較重要的區(qū)別 。Python 3.x引入了一些與Python 2不兼容的關(guān)鍵字和特性逗栽,在Python2中盖袭,可以通過內(nèi)置的__future__模塊導(dǎo)入這些新內(nèi)容。如果你希望在Python 2環(huán)境下寫的代碼也可以在Python3.x中運(yùn)行彼宠,那么建議使用__future__模塊鳄虱。例如,如果希望在Python 2中擁有Python 3.x的整數(shù)除法行為凭峡,可以通過下面的語句導(dǎo)入相應(yīng)的模塊拙已。

from__future__import division

至于更多的細(xì)節(jié),可以參看這里?

1.? print函數(shù)

Python 2中的print語句被Python 3中的print()函數(shù)取代摧冀,這意味著在Python 3中必須用括號(hào)將需要輸出的對象括起來倍踪。Python3.5語法要比之前更為嚴(yán)格霉涨。

在Python 2中使用額外的括號(hào)也是可以的, 但是在Python3中卻是必須帶括號(hào)的,否則會(huì)引起SyntaxError

# 可以嘗試著在Python2/3 環(huán)境下輸入一下語句惭适,體驗(yàn)一下區(qū)別

print 'Hello, World!'

print('Hello, World!')


2. 整數(shù)除法

Python3 在除法上對Python2 進(jìn)行了改進(jìn):

Python 3在整數(shù)除法上的改動(dòng)(寫錯(cuò)了也不會(huì)觸發(fā)Syntax Error),所以在移植代碼或在Python 2中執(zhí)行Python 3的代碼時(shí)楼镐,需要特別注意這個(gè)改動(dòng)癞志。

所以,我還是會(huì)在Python 3的腳本中嘗試用float(3)/2或 3/2.0代替3/2框产,以此來避免代碼在Python2環(huán)境下可能導(dǎo)致的錯(cuò)誤(或與之相反凄杯,在Python 2腳本中用from __future__ import division來使用Python3的除法)


print('Python', python_version())

##嘗試采用不同的環(huán)境來檢查結(jié)果

print('3 / 2 =',3/2)

print('3 // 2 =',3//2)

print('3 / 2.0 =',3/2.0)

print('3 // 2.0 =',3//2.0)

3. Unicode

Python 2有基于ASCII的str()類型,其可通過單獨(dú)的unicode()函數(shù)轉(zhuǎn)成unicode類型秉宿,但沒有byte類型戒突。而在Python 3中,終于有了Unicode(utf-8)字符串描睦,以及兩個(gè)字節(jié)類:bytes和bytearrays膊存。

print type(unicode('this is like a python3 str type'))?
print type(b'byte type does not exist')

print('strings are now utf-8 u03BCnicou0394é!')

print(' also has',type(bytearray(b'bytearrays')))


4. xrange

在Python 2.x中,經(jīng)常會(huì)用xrange()創(chuàng)建一個(gè)可迭代對象忱叭,通常出現(xiàn)在“for循環(huán)”或“列表/集合/字典推導(dǎo)式”中隔崎。

這種行為與生成器非常相似(如”惰性求值“),但這里的xrange-iterable無盡的韵丑,意味著可能在這個(gè)xrange上無限迭代爵卒。

由于xrange的“惰性求知“特性,如果只需迭代一次(如for循環(huán)中)撵彻,range()通常比xrange()快一些钓株。不過不建議在多次迭代中使用range(),因?yàn)閞ange()每次都會(huì)在內(nèi)存中重新生成一個(gè)列表陌僵。

在Python 3中轴合,range()的實(shí)現(xiàn)方式與xrange()函數(shù)相同,所以就不存在專用的xrange()(在Python 3中使用xrange()會(huì)觸發(fā)NameError)碗短。

PS: 這里暫時(shí)不對xrange()和range展開值桩,后期會(huì)有對Python2.7 下的xrange /range 的話題


5.異常

Python 2支持新舊兩種異常觸發(fā)語法,而Python 3只接受帶括號(hào)的的語法(不然會(huì)觸發(fā)SyntaxError)

PS: 這里也不做過多的介紹豪椿,后期會(huì)詳細(xì)介紹奔坟。



6. 異常處理

在Python 2 中的異常處理一般是這種形式


print 'Python', python_version()

try:

????? let_us_cause_a_NameError

except NameError, err:

????? print? err,'--> our error message'


但是在Python3.5中是這樣的:

print('Python', python_version())

try:

?? let_us_cause_a_NameError

except? NameError as err:? #? as 作為別名

??? print(err,'--> our error message')



2. next()函數(shù)和.next()方法


由于會(huì)經(jīng)常用到next()(.next())函數(shù)),所以還要提到另一個(gè)語法改動(dòng)(實(shí)現(xiàn)方面也做了改動(dòng)):在Python

2.7.5中搭盾,函數(shù)形式和方法形式都可以使用咳秉,而在Python3中,只能使用next()函數(shù)(試圖調(diào)用.next()方法會(huì)觸發(fā)AttributeError)鸯隅。

# 再舉一個(gè)栗子:

my_generator=(letter for letter in'abcdefg') # 生成了一個(gè)list

#在python2.7 中調(diào)用

my_generator.next()

#在Python3.5中調(diào)用

next(my_generator)? # 輸出的 'a'

my_generator.next()? # 拋出異常

#Python2.7 中調(diào)用

my_generator.next() # 輸出的是'b'


For循環(huán)變量與全局命名空間泄漏

這個(gè)也應(yīng)該是好消息: 在Python 3.x中澜建,for循環(huán)中的變量不再會(huì)泄漏到全局命名空間中了向挖。

這是Python 3.x中做的一個(gè)改動(dòng),在“What's New In Python 3.0”中有如下描述:

“列表推導(dǎo)不再支持[... for var in item1, item2, ...]這樣的語法炕舵,使用[... for var in

(item1, item2,

...)]代替何之。還要注意列表推導(dǎo)有不同的語義:現(xiàn)在列表推導(dǎo)更接近list()構(gòu)造器中的生成器表達(dá)式這樣的語法糖,特別要注意的是咽筋,循環(huán)控制變量不會(huì)再泄漏到循環(huán)周圍的空間中了溶推。”


相關(guān)的資料:


awesome features of Python that you can't use because you refuse to upgrade to Python 3

關(guān)于你不想知道的所有Python3 unicode特性

Python 3 正在毀滅 Python

Python 3 能振興 Python

Python 3 is fine

Should I use Python 2 or Python 3 for my development activity?

What's New In Python 3.0

Porting to Python 3

Porting Python 2 Code to Python 3

How keep Python 3 moving forward

聽了志強(qiáng)的一番陳述. 小李似乎對Python3.5 更有興趣了.? 于是小李開始動(dòng)手安裝Python3.5了奸攻;

"嘿蒜危,等等",志強(qiáng)對小李說:"記得把安裝手冊發(fā)個(gè)我啊";


不一會(huì)兒睹耐, 小李便把安裝手冊發(fā)給我了志強(qiáng)辐赞。。硝训。响委。




Linux環(huán)境下編譯安裝python3


由于一般的Linux系統(tǒng)下默認(rèn)系統(tǒng)自帶python2.*的版本,這個(gè)版本被系統(tǒng)很多程序所依賴窖梁,所以不建議刪除晃酒,如果使用最新的Python3那么我們知道編譯安裝源碼包和系統(tǒng)默認(rèn)包之間是沒有任何影響的,所以可以安裝python3和python2共存窄绒。

首先去python官網(wǎng)下載python3的源碼包贝次,網(wǎng)址:https://www.python.org/


下載Python 源代碼


1 安裝


./configure --prefix=/usr/python? #添加配置,指定安裝目錄


make -j40 # 編譯python , j后面的數(shù)字和系統(tǒng)CPU核數(shù)有關(guān)彰导,普通的設(shè)置為j4就好了


sudo make install? # 執(zhí)行安裝

如圖所示:

執(zhí)行安裝


整個(gè)過程大約5-10分鐘蛔翅,安裝成功之后,安裝目錄就在/usr/python

系統(tǒng)中原來的python在/usr/bin/python位谋,通過ls -l可以看到山析,python是一個(gè)軟鏈接,鏈接到本目錄下的python2.6.

我們可以把這個(gè)刪除掏父,也可以新建一個(gè)python3的軟鏈接笋轨,只不過執(zhí)行時(shí)python要改成python3,或者python腳本頭部聲明要改為#!/usr/bin/python3

這里為了方便建議先重命名一下赊淑,然后建立個(gè)軟鏈接就可以了爵政,之前的程序頭部也不用更改:

## 修改系統(tǒng)默認(rèn)版本

$sudo mv /usr/bin/python /usr/bin/python.bak

$sudo ln -s /usr/python/bin/python3 /usr/bin/python

##修改本地用戶版本

$sudo mv /usr/bin/python /usr/bin/python2.6 ##對系統(tǒng)默認(rèn)版本python進(jìn)行操作

這樣就建立好了,以后直接執(zhí)行python命令陶缺,就相當(dāng)于調(diào)用python3钾挟,實(shí)際上python3也是個(gè)軟鏈接,鏈接到python3.5.1饱岸,這個(gè)多次鏈接其實(shí)不影響掺出,主要是為了版本升級(jí)更加方便徽千,不用改版本號(hào)了

嘗試著使用 python –V 命令:

(如果在sudo python –V 中顯示python3.5 , 但是在python -V 顯示為python2.7, 請選擇重新啟動(dòng)服務(wù)器)


python –V

疑問或問題


3.1 如果還想使用python2.7 怎么辦?

在原有的python 文件的第一行中添加python2.7 的路徑:

#!/usr/bin/python.bak

或者是

#!/usr/bin/python2.7*

以上兩句都是用于指定使用python 的版本.

3.2 接下來是另一個(gè)問題: pip2.7 與pip3 的問題:

注意:當(dāng)安裝好新版本的python后,會(huì)出現(xiàn) pip2 和pip3 ; 這兩個(gè)命令是有區(qū)別的,區(qū)別如下:

1- 安裝的后的包位置不同

2- Pip2 /3 安裝后都是僅適用于各自版本汤锨。




志強(qiáng)看過以后對小李說到: "嗯双抽, 寫的還可以。那明天開始動(dòng)手練習(xí)Python的基本語法和數(shù)據(jù)結(jié)構(gòu)吧"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闲礼,一起剝皮案震驚了整個(gè)濱河市牍汹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌位仁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件方椎,死亡現(xiàn)場離奇詭異聂抢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)棠众,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門琳疏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闸拿,你說我怎么就攤上這事空盼。” “怎么了新荤?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵揽趾,是天一觀的道長。 經(jīng)常有香客問我苛骨,道長篱瞎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任痒芝,我火速辦了婚禮俐筋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘严衬。我一直安慰自己澄者,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布请琳。 她就那樣靜靜地躺著粱挡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俄精。 梳的紋絲不亂的頭發(fā)上抱怔,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機(jī)與錄音嘀倒,去河邊找鬼屈留。 笑死局冰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灌危。 我是一名探鬼主播康二,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勇蝙!你這毒婦竟也來了沫勿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤味混,失蹤者是張志新(化名)和其女友劉穎产雹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翁锡,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔓挖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了馆衔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘟判。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖角溃,靈堂內(nèi)的尸體忽然破棺而出拷获,到底是詐尸還是另有隱情,我是刑警寧澤减细,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布匆瓜,位于F島的核電站,受9級(jí)特大地震影響未蝌,放射性物質(zhì)發(fā)生泄漏陕壹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一树埠、第九天 我趴在偏房一處隱蔽的房頂上張望糠馆。 院中可真熱鬧,春花似錦怎憋、人聲如沸又碌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至癌别,卻和暖如春皂岔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背展姐。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工躁垛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剖毯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓教馆,卻偏偏與公主長得像逊谋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子土铺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容