1. 程式人生 > >DAY1 python基礎一(1)

DAY1 python基礎一(1)

---恢復內容開始---

一,Python介紹

1,python的出生與應用

  python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆(中文名字:龜叔)為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。  

(龜叔:2005年加入谷歌至2012年,2013年加入Dropbox直到現在,依然掌握著Python發展的核心方向,被稱為仁慈的獨裁者)。

2017年7月的TIOBE排行榜,Python已經佔據第四的位置, Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。

 

由上圖可見,Python整體呈上升趨勢,反映出Python應用越來越廣泛並且也逐漸得到業內的認可!!!

Python可以應用於眾多領域,如:資料分析、元件整合、網路服務、影象處理、數值計算和科學計算等眾多領域。目前業內幾乎所有大中型網際網路企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。

目前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發展史

  • 1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
  • 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠呼叫C語言的庫檔案。從一出生,Python已經具有了:類,函式,異常處理,包含表和詞典在內的核心資料型別,以及模組為基礎的拓展系統。
  • Granddaddy of Python web frameworks, Zope 1 was released in 1999
  • Python 1.0 - January 1994 增加了 lambdamapfilter and reduce.
  • Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言框架的基礎
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 2.7 - July 3, 2010
  • In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
  • Python 3.0 - December 3, 2008
  • Python 3.1 - June 27, 2009
  • Python 3.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015
  • Python 3.6 - December 16,2016

2,python是什麼程式語言。

程式語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強型別定義語言和弱型別定義語言,每個分類代表什麼意思呢,我們一起來看一下。

2.1 編譯型與解釋型。

編譯器是把源程式的每一條語句都編譯成機器語言,並儲存成二進位制檔案,這樣執行時計算機可以直接以機器語言來執行此程式,速度很快; 

直譯器則是隻在執行程式時,才一條一條的解釋成機器語言給計算機來執行,所以執行速度是不如編譯後的程式執行的快的. 

這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進位制的形式)

 

 

編譯型
優點:編譯器一般會有預編譯的過程對程式碼進行優化。因為編譯只做一次,執行時不需要編譯,所以編譯型語言的程式執行效率高。可以脫離語言環境獨立執行。
缺點:編譯之後如果需要修改就需要整個模組重新編譯。編譯的時候根據對應的執行環境生成機器碼,不同的作業系統之間移植就會有問題,需要根據執行的作業系統環境編譯不同的可執行檔案。

解釋型
優點:有良好的平臺相容性,在任何環境中都可以執行,前提是安裝瞭解釋器(虛擬機器)。靈活,修改程式碼的時候直接修改就可以,可以快速部署,不用停機維護。

缺點:每次執行的時候都要解釋一遍,效能上不如編譯型語言。

2.2動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態型別語言和靜態型別語言。

(1)動態型別語言:動態型別語言是指在執行期間才去做資料型別檢查的語言,也就是說,在用動態型別的語言程式設計時,永遠也不用給任何變數指定資料型別,該語言會在你第一次賦值給變數時,在內部將資料型別記錄下來。Python和Ruby就是一種典型的動態型別語言,其他的各種指令碼語言如VBScript也多少屬於動態型別語言。

(2)靜態型別語言:靜態型別語言與動態型別語言剛好相反,它的資料型別是在編譯其間檢查的,也就是說在寫程式時要宣告所有變數的資料型別,C/C++是靜態型別語言的典型代表,其他的靜態型別語言還有C#、JAVA等。

2.3強型別定義語言和弱型別定義語言

(1)強型別定義語言:強制資料型別定義的語言。也就是說,一旦一個變數被指定了某個資料型別,如果不經過強制轉換,那麼它就永遠是這個資料型別了。舉個例子:如果你定義了一個整型變數a,那麼程式根本不可能將a當作字串型別處理。強型別定義語言是型別安全的語言。

(2)弱型別定義語言:資料型別可以被忽略的語言。它與強型別定義語言相反, 一個變數可以賦不同資料型別的值。

強型別定義語言在速度上可能略遜色於弱型別定義語言,但是強型別定義語言帶來的嚴謹效能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否型別安全”之間是完全沒有聯絡的!
例如:Python是動態語言,是強型別定義語言(型別安全的語言); VBScript是動態語言,是弱型別定義語言(型別不安全的語言); JAVA是靜態語言,是強型別定義語言(型別安全的語言)。

通過上面這些介紹,我們可以得出,python是一門動態解釋性的強型別定義語言。

3,python的優缺點。

先看優點

  1. Python的定位是“優雅”、“明確”、“簡單”,所以Python程式看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。
  2. 開發效率非常高,Python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,Python官方庫裡都有相應的模組進行支援,直接下載呼叫後,在基礎庫的基礎上再進行開發,大大降低開發週期,避免重複造輪子。
  3. 高階語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節
  4. 可移植性————由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平臺上執行
  5. 可擴充套件性————如果你需要你的一段關鍵程式碼執行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。
  6. 可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式使用者提供指令碼功能。

再看缺點:

  1. 速度慢,Python 的執行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的執行速度慢在大多數情況下使用者是無法直接感知到的,必須藉助測試工具才能體現出來,比如你用C運一個程式花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程式速度的要求,除非你要寫對速度要求極高的搜尋引擎等,這種情況下,當然還是建議你用C去實現的。
  2. 程式碼不能加密,因為PYTHON是解釋性語言,它的原始碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的專案要求原始碼必須是加密的,那你一開始就不應該用Python來去實現。
  3. 執行緒不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全域性直譯器鎖(Global Interpreter Lock),是計算機程式設計語言直譯器用於同步執行緒的工具,使得任何時刻僅有一個執行緒在執行,Python的執行緒是作業系統的原生執行緒。在Linux上為pthread,在Windows上為Win thread,完全由作業系統排程執行緒的執行。一個python直譯器程序內有一條主執行緒,以及多條使用者程式的執行執行緒。即使在多核CPU平臺上,由於GIL的存在,所以禁止多執行緒的並行執行。關於這個問題的折衷解決方法,我們在以後執行緒和程序章節裡再進行詳細探討。

當我們編寫Python程式碼時,我們得到的是一個包含Python程式碼的以.py為副檔名的文字檔案。要執行程式碼,就需要Python直譯器去執行.py檔案。

由於整個Python語言從規範到直譯器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python直譯器來執行Python程式碼(當然難度很大)。事實上,確實存在多種Python直譯器。

4,python的種類。

CPython

當我們從Python官方網站下載並安裝好Python 3.6後,我們就直接獲得了一個官方版本的直譯器:CPython。這個直譯器是用C語言開發的,所以叫CPython。在命令列下執行python就是啟動CPython直譯器。

CPython是使用最廣的Python直譯器。教程的所有程式碼也都在CPython下執行。

IPython

IPython是基於CPython之上的一個互動式直譯器,也就是說,IPython只是在互動方式上有所增強,但是執行Python程式碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但核心其實都是呼叫了IE。

CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。

PyPy

PyPy是另一個Python直譯器,它的目標是執行速度。PyPy採用JIT技術,對Python程式碼進行動態編譯(注意不是解釋),所以可以顯著提高Python程式碼的執行速度。

絕大部分Python程式碼都可以在PyPy下執行,但是PyPy和CPython有一些是不同的,這就導致相同的Python程式碼在兩種直譯器下執行可能會有不同的結果。如果你的程式碼要放到PyPy下執行,就需要了解PyPy和CPython的不同點

Jython

Jython是執行在Java平臺上的Python直譯器,可以直接把Python程式碼編譯成Java位元組碼執行。

IronPython

IronPython和Jython類似,只不過IronPython是執行在微軟.Net平臺上的Python直譯器,可以直接把Python程式碼編譯成.Net的位元組碼。

小結:

  Python的直譯器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺互動,最好的辦法不是用Jython或IronPython,而是通過網路呼叫來互動,確保各程式之間的獨立性。

二,python環境

windows下安裝Python(手動新增環境變數)以2.7版本舉例:

 

windows:

1 2 3 4 5 6 7 1 、下載安裝包      https: / / www.python.org / downloads / 2 、安裝      預設安裝路徑:C:\python27 3 、配置環境變數      【右鍵計算機】 - - 》【屬性】 - - 》【高階系統設定】 - - 》【高階】 - - 》【環境變數】 - - 》【在第二個內容框中找到 變數名為Path 的一行,雙擊】  - - > 【Python安裝目錄追加到變值值中,用 ; 分割】      如:原來的值;C:\python27,切記前面有分號

windows下安裝Python(自動新增環境變數)以3,.5版本的舉例:

1,官網下載:https://www.python.org/downloads/windows/ 

2,選擇版本。

3,自動新增環境變數。

4,更改完成。

5,點選安裝即可。

linux:

1 2 3 無需安裝,原裝Python環境    ps:如果自帶 2.6 ,請更新至 2.7

 三,python基礎初識。

 1,執行python程式碼。

在d盤下建立一個t1.py檔案內容是:

print('hello world')

 

開啟windows命令列輸入cmd,確定後 寫入程式碼python d:t1.py 

您已經運行了第一個python程式, 即:終端---->cmd-----> python  檔案路徑。 回車搞定~

2,直譯器。

上一步中執行 python d:t1.py 時,明確的指出 t1.py 指令碼由 python 直譯器來執行。

如果想要類似於執行shell指令碼一樣執行python指令碼,例: ./t1.py ,那麼就需要在 hello.py 檔案的頭部指定直譯器,如下:

#-*-encoding:utf-8-*-
print('hello world')

 

   

如此一來,執行: ./t1.py 即可。

ps:執行前需給予t1.py 執行許可權,chmod 755 t1.py

 3,內容編碼。

python2直譯器在載入 .py 檔案中的程式碼時,會對內容進行編碼(預設ascill),而python3對內容進行編碼的預設為utf-8。

ASCII(American Standard Code for Information Interchange,美國標準資訊交換程式碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多隻能用 8 位來表示(一個位元組),即:2**8 = 256,所以,ASCII碼最多隻能表示 256 個符號。

Bin(二進位制) Oct(八進位制) Dec(十進位制) Hex(十六進位制) 縮寫/字元 解釋
0000 0000 0 0 00 NUL(null) 空字元
0000 0001 1 1 01 SOH(start of headline) 標題開始
0000 0010 2 2 02 STX (start of text) 正文開始
0000 0011 3 3 03 ETX (end of text) 正文結束
0000 0100 4 4 04 EOT (end of transmission) 傳輸結束
0000 0101 5 5 05 ENQ (enquiry) 請求
0000 0110 6 6 06 ACK (acknowledge) 收到通知
0000 0111 7 7 07 BEL (bell) 響鈴
0000 1000 10 8 08 BS (backspace) 退格
0000 1001 11 9 09 HT (horizontal tab) 水平製表符
0000 1010 12 10 0A LF (NL line feed, new line) 換行鍵
0000 1011 13 11 0B VT (vertical tab) 垂直製表符
0000 1100 14 12 0C FF (NP form feed, new page) 換頁鍵
0000 1101 15 13 0D CR (carriage return) 回車鍵
0000 1110 16 14 0E SO (shift out) 不用切換
0000 1111 17 15 0F SI (shift in) 啟用切換
0001 0000 20 16 10 DLE (data link escape) 資料鏈路轉義
0001 0001 21 17 11 DC1 (device control 1) 裝置控制1
0001 0010 22 18 12 DC2 (device control 2) 裝置控制2
0001 0011 23 19 13 DC3 (device control 3) 裝置控制3
0001 0100 24 20 14 DC4 (device control 4) 裝置控制4
0001 0101 25 21 15 NAK (negative acknowledge) 拒絕接收
0001 0110 26 22 16 SYN (synchronous idle) 同步空閒
0001 0111 27 23 17 ETB (end of trans. block) 結束傳輸塊
0001 1000 30 24 18 CAN (cancel) 取消
0001 1001 31 25 19 EM (end of medium) 媒介結束
0001 1010 32 26 1A SUB (substitute) 代替
0001 1011 33 27 1B ESC (escape) 換碼(溢位)
0001 1100 34 28 1C FS (file separator) 檔案分隔符
0001 1101 35 29 1D GS (group separator) 分組符
0001 1110 36 30 1E RS (record separator) 記錄分隔符
0001 1111 37 31 1F US (unit separator) 單元分隔符
0010 0000 40 32 20 (space) 空格
0010 0001 41 33 21 ! 歎號
0010 0010 42 34 22 " 雙引號
0010 0011 43 35 23 # 井號
0010 0100 44 36 24 $ 美元符
0010 0101 45 37 25 % 百分號
0010 0110 46 38 26 & 和號
0010 0111 47 39 27 ' 閉單引號
0010 1000 50 40 28 ( 開括號
0010 1001 51 41 29 ) 閉括號
0010 1010 52 42 2A * 星號
0010 1011 53 43 2B + 加號
0010 1100 54 44 2C , 逗號
0010 1101 55 45 2D - 減號/破折號
0010 1110 56 46 2E . 句號
00101111 57 47 2F / 斜槓
00110000 60 48 30 0 數字0
00110001 61 49 31 1 數字1
00110010 62 50 32 2 數字2
00110011 63 51 33 3 數字3
00110100 64 52 34 4 數字4
00110101 65 53 35 5 數字5
00110110 66 54 36 6 數字6
00110111 67 55 37 7 數字7
00111000 70