Python 开篇及第一个Python程序
本節(jié)內(nèi)容
一、python簡(jiǎn)單介紹
python的創(chuàng)始人為吉多.范羅蘇姆(Guido van Rossum)。1989年的圣誕節(jié)期間,吉多.范羅蘇姆為了在阿姆斯特丹打發(fā)時(shí)間,決心開發(fā)一個(gè)新的腳本解釋程序,作為ABC語言的一種繼承。
最新的TIOBE排行榜,python已經(jīng)穩(wěn)居前5位。python崇尚優(yōu)美、清晰、簡(jiǎn)單,是一個(gè)優(yōu)秀并廣泛使用的語言。
由上圖可見,python整體呈上升趨勢(shì),反映出python應(yīng)用越來越廣泛并且也逐漸得到業(yè)內(nèi)的認(rèn)可!!!
python可以應(yīng)用眾多領(lǐng)域,如:數(shù)據(jù)分析、組件繼承、網(wǎng)絡(luò)服務(wù)、圖像處理、數(shù)值計(jì)算喝科學(xué)計(jì)算等眾多領(lǐng)域。目前業(yè)內(nèi)幾乎所有大中型互聯(lián)網(wǎng)企業(yè)都在使用python,如:Youtube、Dropbox、BT、Quora(中國(guó)知乎)、豆瓣、知乎、Google、Yahoo、Facebool、NASA、百度、騰訊、汽車之家、美團(tuán)等。
目前python主要應(yīng)用領(lǐng)域:
. 云計(jì)算:云計(jì)算最火的語言,典型應(yīng)用OpenStack;
. Web開發(fā):眾多優(yōu)秀的Web框架,眾多大型網(wǎng)站均為python開發(fā),Youtube、Dropbox、豆瓣等等,典型的Web框架有django、tornado以及flask;
. 科學(xué)計(jì)算、人工智能:典型第三方庫Numpy,Scipy,Matplotlib,Enthought librarys,pandas;
. 系統(tǒng)運(yùn)維:自動(dòng)化運(yùn)維必備語言;
. 金融:量化交易,金融分析,在金融工程領(lǐng)域,python不但在用,而且用的最多,而且重要性逐年提高。原因是,作為動(dòng)態(tài)語言的python,語言結(jié)構(gòu)簡(jiǎn)單清晰,第三方庫豐富,且成熟穩(wěn)定,科學(xué)計(jì)算和統(tǒng)計(jì)分析都很厲害,成產(chǎn)效率遠(yuǎn)遠(yuǎn)高于C,C++,JAVA等語言,尤其擅長(zhǎng)策略回測(cè);
. 圖形GUI:PyQT,WxPython,TKinter;
python在一些公司的應(yīng)用:
. 谷歌:Google App Engine、code.google.com、Google Earth、谷歌爬蟲、谷歌廣告等項(xiàng)目都在大量使用python開發(fā);
. CIA:美國(guó)中情局網(wǎng)站就是使用python開發(fā)的;
. NASA:美國(guó)航天局大量使用python進(jìn)行數(shù)據(jù)運(yùn)算和分析;
. YouTube:世界上最大的視頻網(wǎng)站就是用python開發(fā)的;
. Dropbox:美國(guó)最大的在線云存儲(chǔ)網(wǎng)站,全部用python實(shí)現(xiàn),網(wǎng)站每天處理10億個(gè)文件的上傳和下載;
. Instagram:美國(guó)最大的圖片分享社交網(wǎng)站,每天超過3千萬張照片被分享,全部用python開發(fā);
. FaceBook:大量的基礎(chǔ)庫均通過python實(shí)現(xiàn)的;
. Redhat:世界上最流行的Linux發(fā)行版本中的yum包管理工具就是使用python開發(fā)的;
. 豆瓣:公司幾乎所有的業(yè)務(wù)均是通過python開發(fā)的;
. 知乎:國(guó)內(nèi)最大的問答社區(qū),通過python開發(fā)的(國(guó)外Quora);
. 春雨醫(yī)生:國(guó)內(nèi)著名的在線醫(yī)療網(wǎng)站是python開發(fā)的;
. 除上面之外,還有搜狐、金山、騰訊、盛大、網(wǎng)易、百度、阿里、淘寶、土豆、新浪、果殼等公司都在使用python完成各種各樣的任務(wù);
Python是一門什么樣的語言?
編譯和解釋的區(qū)別是什么?
編譯器是把源程序的每一條語句都編譯成機(jī)器語言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語言來運(yùn)行此程序,速度很快;
解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語言給計(jì)算機(jī)來執(zhí)行,所以運(yùn)行速度是不如編譯后的程序;
這是因?yàn)橛?jì)算機(jī)不能直接認(rèn)識(shí)并執(zhí)行我們寫的代碼語句,它只能認(rèn)識(shí)機(jī)器語言(二進(jìn)制的形式);
編譯型 VS 解釋型
編譯型,優(yōu)點(diǎn):編譯器一般會(huì)有預(yù)編譯的過程對(duì)代碼進(jìn)行優(yōu)化,因?yàn)榫幾g只做一次,運(yùn)行時(shí)不需要編譯,所以編譯型語言的程序執(zhí)行效率高,可以脫離語言環(huán)境獨(dú)立運(yùn)行。缺點(diǎn):編譯之后如果需要修改就需要整個(gè)模塊重新編譯,編譯的時(shí)候根據(jù)對(duì)應(yīng)的運(yùn)行環(huán)境生成機(jī)器碼,不同的操作系統(tǒng)之間移植就會(huì)有問題,需要根據(jù)運(yùn)行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件。
解釋型,優(yōu)點(diǎn):有良好的平臺(tái)兼容性,在任何環(huán)境中都可以運(yùn)行,前提是安裝了解釋器(虛擬機(jī))。靈活,修改代碼的時(shí)候直接修改就可以,可以快速部署,不用停機(jī)維護(hù);缺點(diǎn):每次運(yùn)行的時(shí)候都要注釋一邊,性能不如編譯型語言。
動(dòng)態(tài)語言和靜態(tài)語言
通常我們所說的動(dòng)態(tài)語言、靜態(tài)語言是指動(dòng)態(tài)類型語言和靜態(tài)類型語言。
(1)動(dòng)態(tài)類型語言:動(dòng)態(tài)類型語言是指在運(yùn)行期間采取做數(shù)據(jù)類型檢查的語言,也就是說在用動(dòng)態(tài)類型語言編程時(shí),永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語言會(huì)在你第一次賦值給變量時(shí)在內(nèi)部將數(shù)據(jù)類型記錄下來。Python和Ruby就是一種典型的動(dòng)態(tài)類型語言,其他的各種腳本語言如VBScript也多少屬于動(dòng)態(tài)類型語言。
(2)靜態(tài)類型語言:靜態(tài)類型語言與動(dòng)態(tài)類型語言剛好相反,它的數(shù)據(jù)類型是在編譯期間檢查的,也就是說在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型,C/C++是靜態(tài)類型語言的典型代表,其他類型的靜態(tài)語言還有C#、JAVA等。
強(qiáng)類型定義語言和弱類型定義語言
(1)強(qiáng)類型定義語言:強(qiáng)制數(shù)據(jù)類型定義的語言。也就是說,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型,如果不經(jīng)過強(qiáng)制轉(zhuǎn)換,那么它永遠(yuǎn)就是這個(gè)數(shù)據(jù)類型了。舉個(gè)例子:如果你定義了一個(gè)整形變量a,那么程序根本不可能將a當(dāng)作字符串類型處理,強(qiáng)類型定義語言是類型安全的語言。
(2)弱類型定義語言:數(shù)據(jù)類型可以被忽略的語言。它與強(qiáng)類型定義語言相反,一個(gè)變量可以賦不同數(shù)據(jù)類型的值。
強(qiáng)類型定義語言在速度上可能略遜色與弱類型定義語言,但是強(qiáng)類型定義語言帶來的嚴(yán)謹(jǐn)性能夠有效地避免許多錯(cuò)誤。另外,"這門語言是不是動(dòng)態(tài)語言"與"這門語言是否類型安全"之間是完全沒有聯(lián)系的。
例如:Python是動(dòng)態(tài)語言,是強(qiáng)類型語言(類型安全的語言);VBScript是動(dòng)態(tài)語言,是弱類型定義語言(類型不安全的語言);JAVA是靜態(tài)語言,是強(qiáng)類型定義語言(類型安全的語言)。
因此,我們可以知道Python是一門動(dòng)態(tài)解釋型的強(qiáng)類型定義語言,正式這些基因成就了如下的Python優(yōu)缺點(diǎn):
優(yōu)點(diǎn)
1、Python的定位是"優(yōu)雅"、"明確"、"簡(jiǎn)單",所以Python程序看上去總是簡(jiǎn)單易懂,初學(xué)者學(xué)Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常復(fù)雜的程序;
2、開發(fā)效率高,Python有非常強(qiáng)大的第三方庫,基本上你想通過計(jì)算機(jī)實(shí)現(xiàn)任何功能,Python官方庫里都有相應(yīng)的模塊進(jìn)行支持,直接下載調(diào)用后,在基礎(chǔ)庫的基礎(chǔ)上再進(jìn)行開發(fā),大大降低開發(fā)周期,避免重復(fù)造輪子。
3、高級(jí)語言---當(dāng)你用Python語言編寫程序的時(shí)候,你無需考慮諸如如何管理你的程序使用內(nèi)存一類的細(xì)節(jié);
4、可移植性---由于它的開源本質(zhì),Python已經(jīng)被移植再許多平臺(tái)上(經(jīng)過改動(dòng)使它工作在不同平臺(tái)上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無需修改就幾乎可以在市場(chǎng)上所有的系統(tǒng)平臺(tái)上運(yùn)行;
5、可擴(kuò)展性---如果你需要你的一段關(guān)鍵代碼運(yùn)行的更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用它們;
6、可嵌入性---你可以把Python嵌入C/C++程序,從而向你的程序用戶提供腳本功能;
缺點(diǎn)
1、速度慢,Python的運(yùn)行速度相比C語言確實(shí)慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑于使用Python的主要原因,但其實(shí)這里所指的運(yùn)行速度慢在大多數(shù)情況下用戶是無法直接感知到的,必須借助測(cè)試工具才能體現(xiàn)出來,比如用C運(yùn)行一個(gè)程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非常夸張了,但是你是無法通過肉眼感知的,因?yàn)橐粋€(gè)正常人所能感知的時(shí)間最小單位是0.15-0.4s所有。其實(shí),在大多數(shù)情況下Python已經(jīng)完全可以滿足你對(duì)程序速度的要求,除非你要寫對(duì)速度要求極高的搜索引擎,這種情況下,當(dāng)然還是建議使用C語言去實(shí)現(xiàn);
2、代碼不能加密,因?yàn)镻ython是解釋型語言,它的源代碼都是以明文形式存放的,不過筆者不認(rèn)為這是一個(gè)缺點(diǎn),如果你的項(xiàng)目要求源代碼必須是加密的,那你一開始就不因該用Python去實(shí)現(xiàn);
3、線程不能利用多CPU問題,這是Python被人詬病最多的一個(gè)缺點(diǎn),GIL即全局解釋鎖(Global Interpreter Lock),是計(jì)算機(jī)程序設(shè)計(jì)語言解釋器用于同步線程的工具,使得任何時(shí)刻僅有一個(gè)線程在執(zhí)行,Python的線程是操作系統(tǒng)的原生線程。在Linux上為pthread,在Windows上為Winthread,完全由操作系統(tǒng)調(diào)度線程的執(zhí)行。一個(gè)Python解釋器進(jìn)程內(nèi)有一條主線程,以及多條用戶程序的執(zhí)行線程。即使在多CPU平臺(tái)上,由于GIL的存在,所以禁止多線程的并行執(zhí)行。
Python解釋器
當(dāng)我們編寫Python代碼時(shí),我們得到的是一個(gè)包含Python代碼的以.py為擴(kuò)展名的文本文件。要運(yùn)行代碼,就需要Python解釋去執(zhí)行.py文件,由于整個(gè)Python語言從規(guī)范到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執(zhí)行python代碼(當(dāng)然難度很大),事實(shí)上,確實(shí)存在多種Python解釋器。
CPython
當(dāng)我們從Python官方網(wǎng)站下載并安裝好Python2.7之后,我們就直接獲得了一個(gè)官方版本的解釋器:CPython。這個(gè)解釋器是用C語言開發(fā)的,所以叫做CPython,再命令行下運(yùn)行Python就是啟動(dòng)CPython解釋器,CPython是使用最廣泛的Python解釋器。
IPython
IPython是基于CPython之上的一個(gè)交互式解釋器,也就是說IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。好比很多國(guó)產(chǎn)瀏覽器雖然外觀不同,但內(nèi)核其實(shí)都是調(diào)用了IE。CPython用>>>作為提示符,而IPython用In[序號(hào)]:作為提示符。
PyPy
PyPy是另一個(gè)Python解釋器,它的目標(biāo)是執(zhí)行速度。PyPy采用JIT技術(shù),對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯(注意不是解釋),所以可以顯著提高Python代碼的執(zhí)行速度。絕大部分Python代碼都可以再PyPy下運(yùn)行,但是PyPy和CPython有一些是不同的,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會(huì)有不同的結(jié)果。如果你的代碼要放到PyPy下執(zhí)行,就需要了解PyPy和CPython的不同點(diǎn)。
Jython
Jython是運(yùn)行在JAVA平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成JAVA字節(jié)碼執(zhí)行。
IronPython
IronPython和Jython類似,只不過IronPython是運(yùn)行在微軟的.Net平臺(tái)上的P櫻桃紅解釋器,可以直接把Python代碼編譯成.Net字節(jié)碼。
從上面可以看出,Python的解釋器很多,但使用最廣泛的還是CPython,如果要和JAVA或.Net交互,最好的辦法不是用Jython或IronPython,而是通過網(wǎng)絡(luò)調(diào)用來交互,確保各程序之間的獨(dú)立性。
Python安裝
Linux、Mac:無需安裝,原裝Python環(huán)境 PS:如自帶2.6,請(qǐng)更新至2.7
Windows:
1、在Python官網(wǎng)下載安裝程序
2、安裝:默認(rèn)安裝路徑:C:\python27
3、配置環(huán)境變量
第一個(gè)Python程序
在解釋器中如下代碼:
轉(zhuǎn)載于:https://www.cnblogs.com/love9527/p/7868568.html
總結(jié)
以上是生活随笔為你收集整理的Python 开篇及第一个Python程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB表上作业法解决运输问题
- 下一篇: ubuntu16.04 安装caffe以