羅振宇在今年的跨年演講,《時間的朋友》中有個觀點,大意是說,人們都有一種受虐情節,有時候希望別人對他粗暴一點。為此,他還舉了兩個例子,分別是“喬布斯對待消費者的態度”和“和菜頭不尊重他的飲食需求”,末了還很享受的來一句:我愛死他了,對我再粗暴一點好不好!
看到很多新同學在學習Python的過程中,猶豫學習Python 2還是學習Python 3而遲遲不行動,白白地浪費了大把時間,錯過了升職加薪的機會,我真心覺得非常遺憾。所以,我忍不住想對大家粗暴一次,給大家一個粗暴而又正確的答案:
應該學習Python 2還是Python 3?都要學!
這個答案可能很出乎意料,也很容易反駁,例如:
真的是這樣嗎?作為一個在一線互聯網公司奮斗的工程師,也是一個多年的Python老手,大家不妨來看看我這么說的理由。
Python 2只維護到2020年不應該成為你拒絕Python 2的理由
所有糾結學習Python 2還是Python 3的朋友都知道,按照Python官方的計劃,Python 2只支持到2020年。可能大家接觸Python的時間還不長,不知道Python官方曾經還說過,Python 2只支持到2015年(https://github.com/python/peps/blob/master/pep-0373.txt)。所以,大家可以看到,跳票不是中國人的特權,Python官方也是會跳票的。
如果大家關注科技新聞的話,會注意到,就在前幾天,微軟剛宣布將在2020年對Win 7停止任何技術支持,之后即使遇到BUG和安全問題,他們也不會再修復,就像現在的XP一樣。但是,大家看看我們周圍的同事、朋友、親戚,到底是用Win 7的多還是用Win 10的多?這些用Win 7的人有吵著說我要升級Windows的嗎?用Win 10的人有吵著讓用Win 7的人升級嗎?
但是,在Python這個圈子,就是有很多人吵著要讓別人升級Python 3。很多時候用戶并不關心自己用的是Python 2還是Python 3,只要能用就行。所以,用Python 2的人并沒有什么動力去升級到Python 3。
如果你覺得,Python 3才是Python的未來,不希望接觸Python 2的項目。那么,問題來了,女神跟你說,晚上來我家給我修下電腦唄,但是我的電腦是Windows XP的,你是去還是不去?
Python官方建議學習Python 3只是一種一廂情愿的行為
我們來看一下Python 2和Python 3的下載統計數據(Python 2.7 still reigns supreme in pip installs):
Python 2的使用量遠遠超過Python 3。而且,大家注意豎軸的單位,是指數!簡單換算一下就知道,僅從下載量來說,Python 2.7的下載量是總下載量的90%!所以,學習Python,想直接拋棄Python 2學習Python 3,幾乎是不可能的事情。
上面的數據是全球范圍的統計數據,我們來看看中國互聯網的情況。為了寫這篇文章,我專門在同學群里面發了紅包,邀請了來自百度、阿里、騰訊、網易、美團、華為、招行、建行、eBay、美圖、Oracle等公司的一線技術專家,統計了各大公司使用Python的情況。
統計數據如下:
統計數據基本與pypi的全球范圍的統計數據吻合。所以,如果你說,我一開始學的就是Python 3,Python 3也是Python的未來,我不想去了解和學習Python 2。那么,你可能要和大半個中國互聯網失之交臂了。或許你也不在乎,但是,如果有人拿錢砸你讓你維護Python 2的代碼呢?
Python 2還會存在很長一段時間
不知道大家有沒有想過,為什么Python官方極力讓大家使用Python 3,而Python 2依然處于統治地位呢?
其實答案很簡單也很粗暴:因為絕大多數人,你給他什么,他就用什么。據我說知,盡管Python 3在2008年12月就已經發布了,但是,目前Python 3仍然不是任何操作系統的默認Python解釋器,這是Python 3使用不廣泛的主要原因。
我們都知道,在任何一家公司,升級服務器的操作系統版本都是一個很慎重事情。所以,我們有理由相信,Python 2還會存在很長一段時間。很長是多長呢?至少比2020年還要長。
有了前面的數據做支撐,我們不是應該學習Python 2嗎,為什么Python 2和Python 3都要學呢?
首先,這個世界并不是非黑即白的,Python也不是。在學習Python 2和學習Python 3中間,其實有一個很好的平衡,那就是同時兼容Python 2和Python 3。為了做到同時兼容Python 2和Python 3,需要深用到Python的__future__庫。__future__庫里面包含了不少從Python 3 backport 到Python 2的特性,充分使用__future__庫,可以很好的兼容Python 2和Python 3。
其次,Python 2和Python 3確實有一些差異,但是,并沒有大家想象的那么大,Python 2和Python 3之間的差異不到Python語法的10%,我們可以快速地了解哪些Python 2里面的語法在Python 3中已經被棄用,在我們寫代碼的過程中,規避掉這一部分語法即可。在Python的最佳實踐中,Python 3里棄用的Python語法,在Python 2里面也不推薦使用,不然也不會被棄用了。如果你知道并堅持Python的最佳實踐,那么,對你來說,Python 2和Python 3的差異就更小了。
最后,我們可以參考優秀的開源軟件的做法,如OpenStack,努力做到代碼同時兼容Python 2和Python 3(Python3 - OpenStack),也可以借助一些開軟的庫(如six)來同時兼容。如果能夠做到同時兼容Python 2和Python 3,我們的使用者將更廣泛,我們的代碼也將更有價值。
拿Windows 來說,當 Windows 7 發布的時候(我就不說 Vista 了),很多人依然抱著 XP 不放,當你問他們為什么時,他們會一本正經地說,“新系統好卡啊”,或是“好多軟件都不兼容啊”,或是“改變很大啊,好不習慣啊”,甚至是“ XP 已經是很好的系統了,微軟出個新系統就是為了坑錢”。
于是乎,春去春又來,送走了 Win 7 ,我們又迎來了 Win 8 ,但是這些人的想法依然沒有改變(我相信中國人中這種情況多一些)。如果這種人很多而且這種情況持續下去的話,最終的結局只會是微軟的狀況越來越差,最終人們毫無選擇,投降了Linux的懷抱(咦?怎么有種心花怒放的感覺)。
當我在腦子里把上面的 Win XP 換成 Python 2 、Win 7 換成 Python 3 甚至 Python 4 時,不禁感到一陣恐懼,我差點就和其他人合謀把 Python 給害死!試想一下,多年以后,Ruby 、Go 等語言都有了很多新的特性,雖然最新的 Python 也十分優秀,但因為一些人,不愿改變,堅守著老版本,拋出一些可笑的理由,最終 Python 因為用戶習慣而沒落了, Guido 和整個 Python 社區的努力都被這些人的習慣給無視了。
讓我們來看看這些可笑的理由(關于詳細的解釋,可以看一下知乎上的徐釀泉的答案,我在這簡單總結一下):
什么?支持 Python 3 的庫太少?醒醒吧,這都6年了,最新都3.4.1了,現在還不支持 Python 3 的庫大多是常年無人維護的東西了。
什么?新版本和舊版本兼容性差?放心吧,以后的版本會越來越不兼容,除非你打算死守 Python 2 一輩子。況且,為了新的特性,改變一下有那么難嗎?
最后,那些還在堅守舊版本的人,你們的一堆理由和批評,真的不是在為自己的問題作辯護嗎?
前面說了我對學習Python 2還是Python 3的一些觀點,希望能夠幫助大家少走彎路,另外,關于Python的版本問題,我這里還有一些良心建議:
這篇文章詳細的說明了為什么要同時學習Python 2和Python 3,如何在Python 2和Python 3中找到一個平衡。但是,重要的不是糾結學習Python 3還是Python 2,而是“stop talking, just do it!”。
Python 2 的 print 聲明已經被 print() 函數取代了,這意味著我們必須包裝我們想打印在小括號中的對象。
Python 2
1
2
3
4
print 'Python', python_version()
print 'Hello, World!'
print('Hello, World!')
print "text", ; print 'print more text on the same line'
run result:
Python 2.7.6
Hello, World!
Hello, World!
text print more text on the same line
Python 3
1
2
3
4
print('Python', python_version())
print('Hello, World!')
print("some text,", end="")
print(' print more text on the same line')
run result:
Python 3.4.1
Hello, World!
some text, print more text on the same line
幸運的是,在 Python 3 中已經解決了把用戶的輸入存儲為一個 str 對象的問題。為了避免在 Python 2 中的讀取非字符串類型的危險行為,我們不得不使用 raw_input() 代替。
Python 2
Python 2.7.6
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.
>>> my_input=input('enter a number: ') enter a number: 123 >>> type(my_input) <type 'int'> >>> my_input=raw_input('enter a number: ') enter a number: 123 >>> type(my_input) <type 'str'>
Python 3
Python 3.4.1
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.
>>> my_input=input('enter a number: ') enter a number: 123 >>> type(my_input) <class 'str'>
Python 2
1
2
3
4
5
print 'Python', python_version()
print '3 / 2=', 3 / 2
print '3 // 2=', 3 // 2
print '3 / 2.0=', 3 / 2.0
print '3 // 2.0=', 3 // 2.0
run result:
Python 2.7.6
3 / 2=1
3 // 2=1
3 / 2.0=1.5
3 // 2.0=1.0
Python 3
1
2
3
4
5
print('Python', python_version())
print('3 / 2=', 3 / 2)
print('3 // 2=', 3 // 2)
print('3 / 2.0=', 3 / 2.0)
print('3 // 2.0=', 3 // 2.0)
run result:
Python 3.4.1
3 / 2=1.5
3 // 2=1
3 / 2.0=1.5
3 // 2.0=1.0
在 Python 3 中,range() 是像 xrange() 那樣實現以至于一個專門的 xrange() 函數都不再存在(在 Python 3 中xrange() 會拋出命名異常)。
在 Python 2 中 xrange() 創建迭代對象的用法是非常流行的。比如: for 循環或者是列表/集合/字典推導式。
這個表現十分像生成器(比如。“惰性求值”)。但是這個 xrange-iterable 是無窮的,意味著你可以無限遍歷。
由于它的惰性求值,如果你不得僅僅不遍歷它一次,xrange() 函數 比 range() 更快(比如 for 循環)。盡管如此,對比迭代一次,不建議你重復迭代多次,因為生成器每次都從頭開始。
python 2.4 與 python 3.0 的比較
一、 print 從語句變為函數
原: print 1, 2+3
改為: print ( 1, 2+3 )
二、range 與 xrange
原 : range( 0, 4 ) 結果 是 列表 [0,1,2,3 ]
改為:list( range(0,4) )
原 : xrange( 0, 4 ) 適用于 for 循環的變量控制
改為:range(0,4)
三、字符串
原: 字符串以 8-bit 字符串存儲
改為: 字符串以 16-bit Unicode 字符串存儲
四、try except 語句的變化
原: try:
......
except Exception, e :
......
改為
try:
......
except Exception as e :
......
五、打開文件
原: file( ..... )
或 open(.....)
改為:
只能用 open(.....)
六、從鍵盤錄入一個字符串
原: raw_input( "提示信息" )
改為: input( "提示信息" )
七、bytes 數據類型
A bytes object is an immutable array. The items are 8-bit bytes, represented by integers in the range 0 <=x < 256.
bytes 可以看成是“字節數組”對象,每個元素是 8-bit 的字節,取值范圍 0~255。
由于在 python 3.0中字符串以 unicode 編碼存儲,當寫入二進制文件時,字符串無法直接寫入(或讀取),必須以某種方式的編碼為字節序列后,方可寫入。
(一)字符串編碼(encode) 為 bytes
例: s="張三abc12"
b=s.encode( 編碼方式)
# b 就是 bytes 類型的數據
# 常用的編碼方式為 : "uft-16" , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等
# 注 : 當字符串不能編碼為指定的“編碼方式”時,會引發異常
(二) bytes 解碼(decode)為字符串
s="張三abc12"
b=s.encode( "gbk") # 字符串 s 編碼為 gbk 格式的字節序列
s1=b.decode("gbk") # 將字節序列 b以gbk格式 解碼為字符串
# 說明,當字節序列不能以指定的編碼格式解碼時會引發異常
(三)使用方法舉例
#coding=gbk
f=open("c:\1234.txt", "wb")
s="張三李四abcd1234"
# -------------------------------
# 在 python2.4 中我們可以這樣寫:
# f.write( s )
# 但在 python 3.0中會引發異常
# -------------------------------
b=s.encode("gbk")
f.write( b )
f.close()
input("?")
開學季換電腦,你選對了嗎?
現代社會,電腦必不可少,生活辦公都需要,學生,尤其是在校大學生,打游戲,完成作業,甚至專業課必不可少,但是如何選一款真正適合自己的卻需要仔細斟酌。
買電腦一部分是土豪不擔心資金,而且也有那個需要就找個懂的朋友,看一個不在乎價錢直接買,還有一部分大概就是我這樣,錢不多但還是想買個能說過去的,今天就給大家推薦幾個。
我個人是比較喜歡游戲本的,雖然我的電腦上一個游戲沒有。因為游戲本的性價比相當高,但是同價位的本兒,那配置就相當勉強了。所以今天給大家介紹一下幾款游戲本
先是國產打頭
1、聯想拯救者720(榮譽勛章版)RMB: 5799~6399
聯想拯救者720
I5 7300HQ的處理器 GTX 1050ti 4G的顯卡,
搭配8G的內存(可拓展至32G、雙內存槽)
1T+128G的雙硬盤(機械+固態)組合,--固態硬盤支持PCI-e協議, 傳輸速度是普通固態的4倍以上---
接口:Usb2.0 *1 usb3.0*2 ,Rj45(網線口)、Type-c、HDMI、耳機麥克風二合一,各一個
3芯鋰離子電池,續航大約2到5小時左右
正版win10系統且支持正版office家庭和學生版2016
IPS屏幕分辨率1920×1080
藍牙4.1
參數可能大多剛開始接觸的小伙伴們不太理解,我認為
其實大家可以注重處理器,顯卡,內存,硬盤的配置
目前主流就是I5 的7代處理器,有人說你把人家I7 放
哪了,其實呢對于目前市面的游戲 比如拳頭的英雄聯盟、暴雪的守望先鋒、steam的絕地求生。I5標壓加8G內存足矣,但是要看顯卡,1050ti畢竟只是中端顯卡,英雄聯盟、守望還可以,吃雞就有點勉強了,低畫質能湊合,要是要求高一點的話,GTX 1060 6G的顯卡,5G也可以,但好像是定制的,網吧專供,要看你買的那款電腦有沒有配,然后就是固態硬盤了,這東西很重要有了它,你電腦在正常使用下壽命擦汗不多增一倍,系統默認裝在固態硬盤里,整體提升電腦的流暢度,機械硬盤就不用多說,傳統的的硬盤,價格便宜儲存量大,但讀取慢 適合存儲音視頻等各種文件。Ok,說了這些,該回到正題了(以下所有對比不注重說明的都以拯救者720作模板)
2、Dell靈越游匣5577 RMB:5299左右
Dell靈越游匣5577
優點:CPU什么的和720差不多,usb接口全是3.0的
缺點:顯卡是1050的差了一點,固態是普通的sata硬盤,沒有office2016
3、麥本本 (QRTECH)大麥5S RMB:5499左右
麥本本 (QRTECH)大麥5S
優點:八代低壓I5睿頻3.4Ghz性能超越睿頻3.5Ghz的7代標壓(實驗室數據)功耗卻小
缺點:1050的顯卡,無office2016
4、機械師游戲本(MACHENIKE) F117七代 RMB:6299左右
優點:I7 處理器 256G的固態硬盤(但是普通的傳輸速度)
缺點:1050顯卡
5、機械革命(MECHREVO)深海泰坦X1 RMB:5999左右
機械革命(MECHREVO)深海泰坦X1
優點:I7處理器
缺點:內存只能拓展至16G
6、華碩(ASUS) 飛行堡壘四代FX63VD RMB:5499左右
華碩(ASUS) 飛行堡壘四代FX63VD
優點:只需拆卸一顆螺絲即可手動升級存儲
缺點:1050的顯卡,無office2016
7、還有兩個,配置和720一毛一樣,
一個是微星(MSI)GL62M 7REX-1481CN但是稍貴,6099左右,
微星(MSI)GL62M 7REX-1481CN
一個是惠普(HP)暗影精靈2代Pro 比720便宜點,5799左右
惠普(HP)暗影精靈2代Pro
這些僅是我個人建議,為一部分資金有限但有需要的朋友盡力推薦最合適的,其實買電腦這東西呢,在滿足自己要求的情況下,配置還要留下一定的富裕,在你工作需求確定的情況下,配置越高他的壽命自然也長,所以,對于那些土豪,你們可以繞道了
(圖片源自網絡如有侵權請聯系刪除)