1989年的聖誕節期間,吉多·範羅蘇姆(Guido van Rossum)爲了在阿姆斯特丹尋找一門「課餘」編程項目打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。之因此選中Python做爲程序的名字,是由於他是BBC電視劇——蒙提·派森的飛行馬戲團(Monty Python‘s Flying Circus)的愛好者。java
python的創始人:Guido van Rossumpython
廢話不說,直接上圖程序員
由上圖可見,Python總體呈上升趨勢,反映出Python應用愈來愈普遍而且也逐漸獲得業內的承認!!!web
Python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域。目前業內幾乎全部大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。互聯網公司普遍使用Python來作的事通常有:自動化運維、自動化測試、大數據分析、爬蟲、Web 等。shell
C 和 Python、Java、C#等
: C語言: 代碼編譯獲得 機器碼 ,機器碼在處理器上直接執行,每一條指令控制CPU工做
其餘語言: 代碼編譯獲得 字節碼 ,虛擬機執行字節碼並轉換成機器碼再後在處理器上執行編程
Python 和 C Python這門語言是由C開發而來
: 對於使用:Python的類庫齊全而且使用簡潔,若是要實現一樣的功能,Python 10行代碼能夠解決,C可能就須要100行甚至更多.
對於速度:Python的運行速度相較與C,絕逼是慢了服務器
Python 和 Java、C#等
: 對於使用:Linux原裝Python,其餘語言沒有;以上幾門語言都有很是豐富的類庫支持
對於速度:Python在速度上可能稍顯遜色網絡
因此,Python和其餘語言沒有什麼本質區別,其餘區別在於:擅長某領域、人才豐富、先入爲主。框架
Web程序:
: Python常常被用於Web開發。好比,經過mod_wsgi模塊,Apache能夠運行用Python編寫的Web程序。使用Python語言編寫的Gunicorn做爲Web服務器,也可以運行Python語言編寫的Web程序。Python定義了WSGI(Web Server Gateway Interface)標準應用接口來協調Http服務器與基於Python的Web程序之間的溝通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可讓程序員輕鬆地開發和管理複雜的Web程序。less
GUI開發:
: Python自己包含的Tkinter庫可以支持簡單的GUI(Graphical User Interface)開發。可是愈來愈多的Python程序員選擇wxPython或者PyQt等GUI包來開發跨平臺的桌面軟件。使用它們開發的桌面軟件運行速度快,與用戶的桌面環境相契合。經過PyInstaller還能將程序發佈爲獨立的安裝程序包。
操做系統:
: 在不少操做系統裏,Python是標準的系統組件。大多數Linux發佈版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能夠在終端機下直接運行Python。有一些Linux發佈版的安裝器使用Python語言編寫,好比Ubuntu的Ubiquity安裝器、Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用做業系統功能的庫。經過pywin32這個第三方軟件包,Python可以訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序可以直接調用.Net Framework。
其餘:
: NumPy、SciPy、Matplotlib可讓Python程序員編寫科學計算程序。有些公司會使用Scons代替make構建C++程序。
不少遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。不少遊戲,如EVE Online使用Python來處理遊戲中繁多的邏輯。
python版本的選擇:從開源項目看,支持py3的比例已經大大提升,知名的項目通常都支持py2.7和py3+。因此,若是沒有歷史遺留問題或者是新項目,建議直接使用py3.
: py3比py2更規範統一。
py3中字符串默認編碼使用Unicode。
py3 解決了py2中字符串和二進制數據的爛攤子。py2中字符串既能夠表示文本數據能夠表示二進制數據
py2.7是2.x系列的最後一個版本,已經中止開發,再也不增長新功能。2020年終止支持。
`Beautiful is better than ugly. 優美勝於醜陋 Explicit is better than implicit. 明瞭勝於晦澀 Simple is better than complex. 簡潔勝於複雜 Complex is better than complicated. 複雜勝於凌亂 Flat is better than nested. 扁平勝於嵌套 Sparse is better than dense. 間隔勝於緊湊 Readability counts. 可讀性很重要 Special cases aren't special enough to break the rules. 即使假借特例的實用性之名,也不可違背這些規則 Although practicality beats purity. 覺對不容許特列必須按照這個規則 Errors should never pass silently. 不要包容全部錯誤 Unless explicitly silenced. 除非你肯定須要這樣作 In the face of ambiguity, refuse the temptation to guess. 當存在多種可能,不要嘗試去猜想 There should be one-- and preferably only one --obvious way to do it. 而是儘可能找一種,最好是惟一一種明顯的解決方案 Although that way may not be obvious at first unless you're Dutch. 雖然這並不容易,由於你不是 Python 之父 Now is better than never. 作也許好過不作, Although never is often better than *right* now. 但不假思索就動手還不如不作 If the implementation is hard to explain, it's a bad idea. 若是你沒法向人描述你的方案 If the implementation is easy to explain, it may be a good idea. 那確定不是一個好方案 反之亦然 Namespaces are one honking great idea -- let's do more of those! 命名空間是一種絕妙的理念,咱們應當多加利用`
by Tim Peters
Python 設計哲學:「優雅」、「明確」、「簡單」
#!/usr/bin/env python #-*- conding:utf-8 -*- print "Hello World"
左邊的部分 python提供的大量模塊、庫 和用戶自定義的模塊。 中間的部分 python的核心——解釋器,也能夠叫虛擬機,這裏的箭頭方向是python運行過程當中數據流的方向, Scanner對應詞法分析,用來將文件或命令輸入的每一行代碼切分爲一個個的token; Parser對應語法分析,在Scanner的分析結果上進行語法分析,創建抽象語法樹(AST); Compiler 則根據創建的AST 生成指令集合——字節碼; Code Evaluator 執行字節碼文件,因此又被稱爲虛擬機。 右邊的部分 對象/類型、內存分配 和解釋器之間的箭頭表示二者之間的「使用」關係; 運行時狀態與解釋器之間的箭頭表示「修改」關係。python在執行的過程當中會不斷的修改當前解釋器的所處的狀態,在不一樣的狀態之間切換。
咱們寫一個最簡單的python程序。 新建 first.py文件,文件內容以下:
#!/usr/bin/env python # -+-coding:utf-8-+- print("First Print!")
再建 second.py
#!/usr/bin/env python # -+-coding:utf-8-+- import first print("Second print!")
而後咱們執行第二個文件:python second.py
輸出:
First Print ! Second Print !
說明:
: 執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。(任何字節碼經過反編譯均可以獲得代碼)
下面解釋一下 python 的執行過程:
這個時候咱們會發現生成了一個 pycache 目錄; 目錄下有文件first.cpython-35.pyc。 若是python版本是2.x 則會在當前目錄直接生成first.pyc。 咱們說python是解釋型語言 ,那這個pyc是什麼文件呢? 按照通常的理解來講,pyc 中的c 應該是compile的意思, 既然是這樣,那麼python代碼是如何被轉換成一系列的機器指令呢?如今咱們就好好深究一下這裏的因果關係。 其實本質上python和java、C#是同樣的,三者的程序執行原理均可以用兩個詞歸納——虛擬機、字節碼。 在python中有一個很是核心的東西——interpreter,當咱們在命令行敲入python,當咱們在shell中敲入命令python的時候, 目的就是爲了激活這個解釋器; 當咱們執行 python second.py的時候,python解釋器當即被激活,而後執行python程序。在pyhton的解釋器還要完成一個很是重要的工做——編譯.py文件。
python解釋器在執行程序的時候,首先就是對文件中的python源代碼進行編譯,生成一個python的字節碼(byte code),而後 將字節碼交給python虛擬機,虛擬機則按照順序一條一條的執行字節碼,直到程序執行完。 上面在執行python second.py時,咱們發現只有second.py文件生成了pyc文件,緣由咱們不知道,可是咱們能夠猜想python在執行的時候,只對須要編譯的文件進行編譯。那什麼是須要編譯的文件呢? 好比說,first.py文件不僅被 second.py調用, 還被其餘的py文件調用,這個時候,若是把 first.py 進行編譯,那下次就直接調用編譯後的pyc文件,這樣就加快了執行速度。
那麼有人就要問了,若是我修改了first.py文件,下次調用first.pyc的時候不就不是最新的代碼了嗎,對於這個咱們並不須要擔憂。pyc文件中包含自身建立的時間,在python程序執行的時候,首先會嘗試加載pyc文件,在加載的過程當中,python會比對py文件和 pyc文件的時間,若是pyc文件時間早於py文件時間,就會從新編譯py文件,生成新的pyc文件, 不然就會直接調用py從文件。
語法要求
: 強烈建議你在每一個縮進層次使用 單個製表符 或 四個空格。
不要混合使用製表符和空格來縮進,由於這在跨越不一樣的平臺的時候,沒法正常工做。
雙引號中的字符串與單引號中的字符串的使用徹底相同。
利用三引號,你能夠指示一個多行的字符串。能夠在三引號中自由的使用單引號和雙引號。
值得注意的一件事是,在一個字符串中,行末的單獨一個反斜槓表示字符串在下一行繼續,而不是開始一個新的行。
好的編輯器能提升開發代碼的效率!
變量
: 變量以字母或下劃線開頭,由字母、數字或下劃線組成,變量名稱區分大小寫。
能夠直接輸入變量名查看變量值。
下劃線'_'表示最後一個表達式的值。
#!/usr/bin/env python # -*- coding: utf-8 -*- name = "nhy"
上述代碼聲明瞭一個變量,變量名爲: name,變量name的值爲:nhy
變量的做用:暱稱,其代指內存裏某個地址中保存的內容
變量的賦值:
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "wupeiqi" name2 = name1
如下關鍵字不能聲明爲變量名
: ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
外層變量,能夠被內層變量使用
內層變量,沒法被外層變量使用
在python中沒有常量的概念,全部的數值均可以改變,
: 定義一個常量應該用大寫的形式。
AGE = 37 就是常量,他是大寫的!是約定俗成的。可是他是能夠改的!
#!/usr/bin/env python
: Shebang 是一個由井號和歎號構成的字符串行(#!), 其出如今文本文件的第一行的前兩個字符. 在文件中存在Shebang的狀況下, 類Unix操做系統的程序載入器會分析Shebang後的內容, 將這些內容做爲解釋器指令, 並調用該指令, 並將載有Shebang的文件路徑做爲該解釋器的參數。#!先用於幫助內核找到Python解釋器, 可是在導入模塊時, 將會被忽略. 所以只有被直接執行的文件中才有必要加入#!
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認 ASCII)。
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
顯然 ASCII 碼沒法將世界上的各類文字和符號所有表示,所以就須要一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(萬國碼)是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定全部的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536。
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ASCII 碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
Python2中文件的默認編碼爲ASCII,在文件中含有中文的時候就會報錯,
所以要在文件開頭寫上:
# -*- coding: utf-8 -*- 指定編碼類型爲utf-8
python3中文件的默認編碼爲UTF-8,已經不存在上述問題。