Python學習之路 - 基礎入門
本系列文章使用的Python版本為3.6.2
使用開發工具為Pycharm2017
一、Python介紹
Python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。
最新的TIOBE排行榜,Python趕超PHP占據第五, Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。
目前Python主要應用領域:
- 雲計算:雲計算最火的語言, 典型應用OpenStack
- WEB開發:眾多優秀的WEB框架,眾多大型網站均為Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科學運算、人工智能:典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系統運維:運維人員必備語言
- 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤其擅長策略回測
- 圖形GUI:PyQT, WxPython,TkInter
Python在一些公司的應用:
- 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發
- CIA:美國中情局網站就是用Python開發的
- NASA:美國航天局(NASA)大量使用Python進行數據分析和運算
- YouTube:世界上最大的視頻網站YouTube就是用Python開發的
- Dropbox:美國最大的在線雲存儲網站,全部用Python實現,每天網站處理10億個文件的上傳和下載
- Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發
- Facebook:大量的基礎庫均通過Python實現的
- Redhat:世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
- 豆瓣:公司幾乎所有的業務均是通過Python開發的
- 知乎:國內最大的問答社區,通過Python開發(國外Quora)
- 春雨醫生:國內知名的在線醫療網站是用Python開發的
- 除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿裏、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。
Python 是一門什麽樣的語言?
編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每個分類代表什麽意思呢,我們一起來看一下。
編譯和解釋的區別
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;
而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的。
這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)。
就好像你想看一本英文書,編譯器會將整本書翻譯成中文供你觀看,這時你看的就會很方便,怎麽反復看都沒有問題;解釋器只會解釋你當前想要看的語句,如果你想再次看一遍同樣的語句則需要再次找解釋器解釋一遍,這樣就會給你的閱讀帶來麻煩。
動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。
(1)動態類型語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬於動態類型語言。
(2)靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。
強類型定義語言和弱類型定義語言
(1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,如果不經過強制轉換,那麽它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變量a,那麽程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。
(2)弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變量可以賦不同數據類型的值。
強類型定義語言在速度上可能略遜色於弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是完全沒有聯系的!
例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。
通過上面這些介紹,我們可以得出,python是一門動態解釋性的強類型定義語言。那這些基因使成就了Python的哪些優缺點呢?我們繼續往下看。
Python的優點
當你用一種語言開始作真正的軟件開發時,你除了編寫代碼外,還需要很多基本的已經寫好的現成的東西,來幫助你加快開發進度。比如說,要編寫一個電子郵件客戶端,如果先從最底層開始編寫網絡協議相關的代碼,那估計一年半載也開發不出來。高級編程語言通常都會提供一個比較完善的基礎代碼庫,讓你能直接調用,比如,針對電子郵件協議的SMTP庫,針對桌面環境的GUI庫,在這些已有的代碼庫的基礎上開發,一個電子郵件客戶端幾天就能開發出來。
Python就為我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱作“內置電池(batteries included)”。用Python開發,許多功能不必從零編寫,直接使用現成的即可。
除了內置的庫外,Python還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。當然,如果你開發的代碼通過很好的封裝,也可以作為第三方庫給別人使用。
許多大型網站就是用Python開發的,例如YouTube、Instagram,還有國內的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美國航空航天局)都大量地使用Python。
龜叔給Python的定位是“優雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常復雜的程序。
總的來說,Python的哲學就是簡單優雅,盡量寫容易看明白的代碼,盡量寫少的代碼。如果一個資深程序員向你炫耀他寫的晦澀難懂、動不動就幾萬行的代碼,你可以盡情地嘲笑他。
那Python適合開發哪些類型的應用呢?
首選是網絡應用,包括網站、後臺服務等等;
其次是許多日常需要的小工具,包括系統管理員需要的腳本任務等等;
另外就是把其他語言開發的程序再包裝起來,方便使用。
Python的缺點
第一個缺點就是運行速度慢,和C程序相比非常慢,因為Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,所以非常快。
但是大量的應用程序不需要這麽快的運行速度,因為用戶根本感覺不出來。例如開發一個下載MP3的網絡應用程序,C程序的運行時間需要0.001秒,而Python程序的運行時間需要0.1秒,慢了100倍,但由於網絡更慢,需要等待1秒,你想,用戶能感覺到1.001秒和1.1秒的區別嗎?這就好比F1賽車和普通的出租車在北京三環路上行駛的道理一樣,雖然F1賽車理論時速高達400公裏,但由於三環路堵車的時速只有20公裏,因此,作為乘客,你感覺的時速永遠是20公裏。
第二個缺點就是代碼不能加密。如果要發布你的Python程序,實際上就是發布源代碼,這一點跟C語言不同,C語言不用發布源代碼,只需要把編譯後的機器碼(也就是你在Windows上常見的xxx.exe文件)發布出去。要從機器碼反推出C代碼是不可能的,所以,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把源碼發布出去。
這個缺點僅限於你要編寫的軟件需要賣給別人掙錢的時候。好消息是目前的互聯網時代,靠賣軟件授權的商業模式越來越少了,靠網站和移動應用賣服務的模式越來越多了,後一種模式不需要把源碼給別人。
再說了,現在如火如荼的開源運動和互聯網自由開放的精神是一致的,互聯網上有無數非常優秀的像Linux一樣的開源代碼,我們千萬不要高估自己寫的代碼真的有非常大的“商業價值”。那些大公司的代碼不願意開放的更重要的原因是代碼寫得太爛了,一旦開源,就沒人敢用他們的產品了。
二、安裝Python解釋器
在Mac上安裝Python
如果你正在使用Mac,系統是OS X 10.8~10.10,那麽系統自帶的Python版本是2.7。要安裝最新的Python 3.6,有兩個方法:
方法一:從Python官網下載Python 3.6的安裝程序(網速慢的同學請移步國內鏡像),雙擊運行並安裝;
方法二:如果安裝了Homebrew,直接通過命令brew install python3
安裝即可。
在Linux上安裝Python
如果你正在使用Linux,那麽基本代表你有著Linux管理經驗,Linux上自帶Python2,如果想升級到最新版應該難不倒你的。
在Windows上安裝Python
首先,根據你的Windows版本(64位還是32位)從Python的官方網站下載Python 3.6對應的64位安裝程序或32位安裝程序,然後,運行下載的EXE安裝包:
特別要註意勾上Add Python 3.6 to PATH
,然後點“Install Now”即可完成安裝。
三、輸出
輸出方式經常使用的有兩種,第一種是print()函數,下面我們輸出hello world。
1 print("hello world")
輸出結果:
第二種輸出方式需要引入sys庫,然後使用sys.stdout.write()函數輸出。
1 import sys 2 sys.stdout.write("afsd")
輸出結果:
從輸出結果可以看出兩種輸出方式的差別,print()函數輸出結果後會再加一個換行,而sys.stdout.write()則沒有換行。
Python和其他常用高級語言不同的地方是Python一條語句結束時不需要加分號,並且在Python中也不會用到大括號,Python的語句就只是用換行符和縮進來表示語句之間的關系。
換行就表示一條語句的結束,縮進表示語句間的包含關系。
四、變量
由於Python是動態類型語言,所以不需要定義變量類型,直接寫變量名就可以。
1 name = "my name is Vector" 2 print(name)
輸出結果:
在Python3中是可以直接輸入中文的,例如print(“姓名”)這樣,但是在Python2中需要在文件的頂部加上 -*- coding:utf-8 -*- 這句話,因為Python3的默認字符為Unicode,而Python2的默認字符為ASCII。
在Python中不僅有單行的字符串,還有多行的字符串,多行字符串用 ‘‘‘內容‘‘‘ 標記,如下。
1 msg = ‘‘‘ 2 這裏是第一行 3 這裏是第二行 4 這裏是第三行 5 ‘‘‘ 6 print(msg)
輸出結果:
註釋
Python中的單行註釋用 # 來註釋,如下。
print(‘hello world‘) #這裏即將輸出hello world
多行註釋用三個單引號來標記 ‘‘‘內容‘‘‘,如下。
1 ‘‘‘ 2 這裏是第一行註釋 3 這裏是第二行註釋 4 這裏是第三行註釋 5 ‘‘‘
在Python中單引號和雙引號沒有區別,都不會轉義其他字符。
五、輸入
用戶輸入通常我們用input()函數,如下
1 username = input(‘username:‘) 2 password = input(‘password:‘) 3 print(username,password)
我們輸入vector和asd123
輸出結果:
有了輸入後,我們就可以控制格式化輸出了。
第一種格式化輸出方式
1 name = input(‘name:‘) 2 age = input(‘age:‘) 3 4 info = ‘‘‘ 5 ------------- Info -------------- 6 Name:‘‘‘ + name + ‘‘‘ 7 age:‘‘‘ + age + ‘‘‘ 8 ------------- Over -------------- 9 ‘‘‘ 10 print(info)
這裏我們輸入vector和18
輸出結果:
第二種格式化輸出方式
用 %s %d %f 等來控制格式,並在結尾一次傳入參數,傳參格式為 %(參數1,參數2,...)
%s代表字符串,%d代表正數,%f代表浮點數
1 name = input(‘name:‘) 2 age = int(input(‘age:‘)) 3 4 info = ‘‘‘ 5 ------------- Info -------------- 6 Name:%s 7 age:%d 8 ------------- Over -------------- 9 ‘‘‘%(name,age) 10 print(info)
輸出結果:
如果想將輸出的內容變成紅色,則用\033[31;1m%s\033[0m 如果想將輸出的內容變成綠色,則用\033[32;1m%s\033[0m 格式:\033[顯示方式;前景色;背景色m 說明: 前景色 背景色 顏色 --------------------------------------- 30 40 黑色 31 41 紅色 32 42 綠色 33 43 黃色 34 44 藍色 35 45 紫紅色 36 46 青藍色 37 47 白色 顯示方式 意義 ------------------------- 0 終端默認設置 1 高亮顯示 4 使用下劃線 5 閃爍 7 反白顯示 8 不可見 例子: \033[1;31;40m <!--1-高亮顯示 31-前景色紅色 40-背景色黑色--> \033[0m <!--采用終端默認設置,即取消顏色設置-->
下面演示一下輸出結果帶顏色的例子:
1 name = input(‘name:‘) 2 age = int(input(‘age:‘)) 3 4 info = ‘‘‘ 5 ------------- Info -------------- 6 Name:\033[31;1m%s\033[0m #輸出結果為紅色 7 age:\033[32;1m%s\033[0m #輸出結果為綠色 8 ------------- Over -------------- 9 ‘‘‘%(name,age) 10 print(info)
輸出結果:
第三種格式化輸出方式
在字符串中插入形參(形參用大括號標記{形參}),最後在結尾給形參賦值。
1 name = input(‘name:‘) 2 age = int(input(‘age:‘)) 3 4 info = ‘‘‘ 5 ------------- Info -------------- 6 Name:{_name} 7 age:{_age} 8 ------------- Over -------------- 9 ‘‘‘.format(_name=name,_age=age) 10 print(info)
輸出結果:
第四種格式化輸出方式
形參用數字表示,在結尾直接按照順序給形參賦值。
1 name = input(‘name:‘) 2 age = int(input(‘age:‘)) 3 4 info = ‘‘‘ 5 ------------- Info -------------- 6 Name:{0} 7 age:{1} 8 ------------- Over -------------- 9 ‘‘‘.format(name,age) 10 print(info)
輸出結果:
Python學習之路 - 基礎入門