學習來自馬哥教育的視頻,感謝馬哥python
編程語言:程序員
用戶:web
問題空間算法
計算機:解決問題shell
解空間編程
抽象:性能優化
機器代碼-->微碼編程-->高級語言數據結構
(語言的高下級的是根據語言是否被人類容易理解或者更接近於人類的理解範圍)框架
python:可當三種工具使用python2.7
shell編程:
編程語言:用於實現粘結
框架:web、Django
缺陷:
字節碼:bytecode
python的執行流程
python的源程序都表現爲.py的文件,源代碼文件由編譯器(Complier解釋器)在第一次被執行時編譯爲格式爲.pyc的字節碼, 字節碼在解釋器(interpreter解釋器)中運行,這是interpreter被成爲PVM(python的虛擬機)。
當編譯(complier)結束時,由PVM讀取bytecode,然後在處理器(prosseor)上予以執行。
Python的實現:三種
一、CPython
原始、標準的實現方式
二、Jython
用於與Java語言集成的實現
三、IronPython
用於與.NET框架集成的實現
Python性能優化工具
一、Psyco
Python語言的一個擴展模塊,能夠即時對程序代碼進行專業的算法優化,能夠在必定程度上提升程序的執行速度,尤爲是在程序中有大量循環操做時
目前開發工做已經中止,由PyPy所接替
二、PyPy
PyPy是用於python實現的python解釋器
python語言的動態編譯器,是Psyco的後繼項目
能夠運行在Linux的32位和64位、MacOSX和Windows的32位平臺中
三、Shed Skin
python編譯器,可以將python代碼裝換成優化的C++代碼
編寫、執行python代碼
一、交互式解釋器
直接啓動python,其顯示信息取決於程序版本及操做系統等
二、python程序文件
(1) 交互式模式下的程序執行完成後難以再次運行
(2) 將編寫的程序保存指文件(.py)中方便屢次運行
python的此類包含了一系列預編寫好的語句的程序文件稱做 」模塊「
可以直接運行的模塊文件一般稱做腳本(即程序的頂層文件)
python分爲程序入口文件和模塊文件(即函數文件),模塊文件本身沒法運行,要利用程序入口文件調用以後才能運行,模塊文件能夠編寫一段代碼本身檢查是否有語法錯誤。
python程序文件
一、python源程序文件一般以.py爲擴展名
(1)例如,新建一個名爲firstpycode.py的文件,內容以下所示
#!/usr/bin/python
import platform
print platform.uname()
uname能夠理解爲platform模塊提供的函數
(2)第一行爲shebang,即執行腳本時通知內容要啓動的解釋器
(3)第二行經過import導入一個python模塊platform
(4)第三行打印platform模塊的uname方法的執行結果
二、給予此腳本以執行權限,並執行便可
shebang魔術:任何程序要想啓動執行,一般表現爲一個進程,這個進行要想啓動,必須向內核註冊,由內核給它生成一個進程描述機構,才能運行起來。因此內核必需要理解這是一個可執行程序,按照可執行程序內部的各類執行結構,瞭解它的執行入口,內核把執行入口放到CPU上,內核退出,程序執行。
#!/usr/bin/python:文本文件不是機器代碼,就沒辦法執行,第一行(#!/usr/bin/python)就是生成一段特殊結構,內核經過讀取這一行中的代碼,就會知道這個文件不能拿到CPU上直接執行,而是先調用python程序,由python程序把print platform,username()這一段代碼看成參數來執行。而python本身是可以在內核上執行的二進制應用程序,因此此處當python二進制應用程序執行起來之後,就由python把代碼加載進來進行執行。
python程序文件
一、python程序能夠分解成模塊、語句、表達式和對象
(1)程序由模塊構成
(2)模塊包含語句
(3)語句包含表達式
(4)表達式創建並處理對象
表達式是」某事「,而語句是「作某事(即指令)」;
例:「3+4」是某事,而"print 3+4"則是作某事;
語句的特性:它們改變了事物,例如:賦值語句改變了變量,print語句改變了屏幕輸出等;
python一切皆對象
Python IDE
一、IDLE
標準python環境提供
二、Eclipse和PyDev
三、Python Win
四、Komodo
五、Wingware
六、PyCharm
交互式解釋器
python程序文件.py
面向過程
以指令爲中心,由指令處理數據
如何組織代碼解碼問題
面向對象
以數據爲中心,全部的處理代碼都圍繞數據展開
如何設計數據結構組織數據,並提供對此類數據所容許處理操做
使用高版本python簡單方法:
一、編譯安裝新版本至某特定路徑
二、pyenv
編譯安裝python
一、準備開發環境
Python-2.7.6.tar
ipython-1.2.1.tar
須要使用readline-devel
# yum install readline-devel -y
# tar xf Python-2.7.6.tar.xz
# ./configure --prefix=/usr/local/python27
#make && make install
二、測試
# /usr/local/python27/bin/python2.7
三、安裝ipython
# tar xf ipython-1.2.1.tar.gz
# cd ipython-1.2.1
# /usr/local/python27/bin/python2.7 setup.py build //編譯
# /usr/local/python27/bin/python2.7 setup.py install //安裝
# ls /usr/local/python27/bin/ //安裝目錄
連接python2.7和ipython
# ln -sv /usr/local/python27/bin/python2.7 /usr/local/bin/python27 //爲了調用方便,爲安裝程序建立軟鏈接
# ln -sv /usr/local/python27/bin/ipython /usr/local/bin/ //同上
快速入門
數據結構
一、經過某種方式(例如對元素進行編號)組織在一塊兒的數據元素的集合,這些數據元素能夠是數字或者字符,甚至能夠是其餘的數據結構;
二、python的最基本數據結構是序列;
三、序列中的每一個元素被分配一個序號-----即元素的位置,也稱爲索引:索引從0開始編號;
四、Python包含六種內建的數據序列:列表、元素、字符串、Unicode字符串、buffer對象和xrange對象。
Python的關鍵要素
一、基本數據類型
二、對象引用
三、組合數據類型
四、邏輯操做符
五、控制流語句
六、算術操做符
七、輸入/輸出
八、函數的建立與調用
要素1:基本數據類型
一、任何程序語言都必須可以表示基本數據項
二、python中的基本數據類型有:
Integral類型
整型:不可變類型
-257,201939249239239
布爾型(布爾型不能加引號;可是字符串必須加引號,單雙引號不加區別)
true,false
浮點類型
浮點數
3.1415
複數
3+6j
十進制數字
字符串
‘GNU is not Unix’,「hello」,「world」
變量分爲可變類型和不可變類型,其中整型就是不可變類型,
布爾型不能加引號
python中全部的字符串全都須要引號引發來,單雙引號不加區別,但必須有引號,數值無需引號
不可變類型:變量num定義爲對象2時,對象是不能夠被修改的 (注意2在python中被保存爲對象),變量能夠被修改
注意:num是變量,而2或者3是對象
定義了變量num所引用的對象(2或3)在內存中的地址,即變量num的對象是2時,內存地址是18512976,是3時,地址就爲18512952,id不同就表示對象在內存中不是同一個位置,即對象不同。
因此2沒有動,3也沒有動,只是變量所指向的內存空間發生改變了
字符串不加區別的用單雙引號引發來,字符串在python中自己是一種序列,是把多個字符按照特定次序組織起來的一種數據結構,因此稱爲序列,全部序列能夠經過索引、下標進行引用。
字符串是不可變類型
這裏jerry就是一個序列
字符串是一個組合,能夠只引用一個變量,是不可變類型
要素2:對象引用(變量)
python將全部數據存爲內存對象;
python中,變量事實上是指向內存對象的引用;
動態類型:在任什麼時候刻,只要須要,某個對象引用均可以從新引用一個不一樣的對象(能夠是不一樣的數據類型);
內建函數type()用於返回給定數據項的數據類型;
「=」 用於將變量名與內存中的某對象綁定:若是對象事先存在,就直接進行綁定;不然,則由 「=」 建立引用的對象。
變量和對象是分開存放的
在內存空間中存儲一個jerry字符串,jerry在內存要有地址,須要指定起始地址,
變量名稱自身name也在內存中,讓 name = jerry能夠理解爲聲明瞭兩個對象,name是一個指針指向了jerry的起始地址,
從而把Jerry這個內存對象中的值賦值給name了。
若是要把name改成等於tom,jerry是不可變的,因此一旦name=tom,那麼就會在內存中再找一個空間存tom,
然後將name的指向結果指向tom的起始位置。jerry這個對象依然還在內存中。
各類內存對象在不被引用時有垃圾回收器回收,在內存對象計數爲0時,就會被垃圾回收器回收
對象事先存在,直接綁定
要素2:對象引用(變量)
一、變量命令規則
只能包含字母、數字和下劃線,且不能以數字開頭
區分字母大小寫
禁止使用保留字
python2與python3的保留字有所不一樣
二、命令慣例
以單一下劃線開頭變量名(__x)不會被from module import *語句導入;
先後有下劃線的變量名(__x__)是系統定義的變量名,對python解釋器有特殊意義;
以兩個下劃線開頭但結尾沒有下劃線的變量名(__x)是類的本地變量;
交互式模式下。變量名「_」用於保存最後表達式的結果
注意:變量名沒有類型,對象纔有
保留字是系統中的關鍵字,變量名「_」用於保存最後表達式的結果
變量名沒有類型,對象纔有
變量能夠引用任何對象,好比剛纔引用的是對象3,下一次能夠引用對象jerry,在python中變量名只是內存引用的標識。
要素3:組合數據類型
一、數據結構:經過某種方式(例如對元素進行編號)組織在一塊兒的數據元素的集合
二、python經常使用的組合數據類型
序列類型
列表:使用[]建立。如["call","me","Ishmael","."]
元組:使用()建立,如('one','two')
字符串也屬於序列類型
集合類型
集合
映射類型
字典
列表:是可變對象,支持原處修改,能夠對數據自己進行修改
元組:不可變對象
列表和元組的區別在於:
列表是可改變的,能夠直接把列表中的字符改成別的,好比「pig」改成「tree」,可是l1的內存對象位置不會發生改變(但pig這個元素的引用位置已經發生改變,即指針的起始位置改到tree的起始位置了)。
sheep改成dog,dog改成tom是在原處修改,在內存中直接改掉。原處修改後,sheep、dog、tom自己各自是字符串,並無被改掉,而是l1[3]這個引用被改掉了,元素引用位置被改變了
字符串能夠作切片,切片自己又建立新的對象,原片不發生任何改變
2表示步進長度
使用 type() 獲取函數的類型
使用 id() 獲取內存的位置
使用 dir() 獲取模塊的子命令
使用 len() 獲取元素內部的個數
使用 help() 獲取函數詳細信息
要素3:組合數據類型
一、列表是可變序列,元組是不可變序列;
二、python中,組合數據類型也是對象,所以其能夠嵌套;
['hello','world',[1,2,3]]
三、實質上,列表和元組並不真正存儲數據,而是存放對象引用;
四、python對象能夠具備其能夠被調用的特定「方法(函數)」;
五、元組、序列以及字符串等數據是「有大小的」,也即,其長度可以使用內置函數len()測量;
列表和元素並不真正存儲數據,而是存放對象引用?
B爲列表,列表要用[]括起來,使用[]定義一個列表時,列表內部就會有好幾個元素;但B引用A這個列表中的元素時,B存的不是元素自身,而是元素引用,因此寫「this」並非在列表B中存了this這個字符串,而是在內存中找了個地方存了this,而後,把this存儲的位置放到了列表(B)中,因此每一次元素改變,但字符串自身不可變,但前面把sheep改成dog,之因此能夠改變是由於把引用(B中)改變了,即引用了新的內存對象,引用改變了,看上去也就改變了,可是B在內存中也是對象,也有一個一個起始位置,但B的起始位置並無發生變化,因此說列表是可變對象。若是B中存了this,其實並非this(B中),而是存的是指向this的指針(指向A,即內存中存的this對象的起始位置),因此B中存的是引用。
要素4:邏輯操做符
一、邏輯運算是任何程序設計語言的基本功能;
二、python提供了4組邏輯運算
身份操做符
is:斷定左端對象引用是否相同於右端對象引用;也能夠與None進行;
比較操做符
<,>,<=,>=,==
成員操做符
in或not in:測試成員關係
邏輯操做符
and,or,not
name和test引用了同一個對象
對象引用能夠不一樣,可是對象所屬類型有可能相同。
要素5:控制流語句
一、控制流語句是過程式編程語言的基本控制機制
二、python的常見控制流語句
要素6:算術操做符
一、python提供了完整的算術操做集;
二、不少的python數據類型也可使用加強的賦值操做符,如+=、-=等;
三、一樣的功能,使用加強型賦值操做符的性能較好;
四、python的 int 類型是不可變的,所以加強型賦值的實際過程是建立了一個新的對象來存儲結果後將變量名執行了從新綁定;
要素7:輸入輸出
一、現實中,具備實際功能的程序必須可以讀取輸入(如從鍵盤或文件中),以及產生輸出,並寫到終端或文件中;
二、python的輸入/輸出
輸出
python3:print()函數
python2:print語句
輸入
input()
raw_input()
raw_input() //交互式時不知道有什麼區別或不加區別時使用
交互式,經過鍵盤輸入的方式建立一個內存對象,只不過建立以後,直接輸出了,之後再也沒法引用了,所以應該引用一個變量,將建立的結果保存下來,方便屢次引用。
如:定義一個變量 a
要素7:輸入/輸出
一、python解釋器提供了3種標準文件對象,分別爲標準輸入、標準輸出和標準錯誤,它們在sys模塊中分別以sys.stdin、sys.stdout和sys.stderr形式提供;
二、python的print語句實現打印--一個對程序員友好的標準輸出流接口;
三、從技術角度來說,print是把一個或多個對象轉換爲其文本表達形式,而後發送給標準輸出或另外一個相似文件的流;
(1) 在python中,打印與文件和流的概念聯繫緊密;
文件寫入方法是把字符串寫入到任意文件;
print默認把對象打印到stdout流,並添加了一些自動的格式化。
(2) 實質上,print語句只是python的人性化特性的具體實現,它提供了sys,stdout,write()的簡單接口,再加上一些默認的格式設置;
(3) print接受一個逗號分隔的對象列表,併爲行尾自動添加一個換行符,若是不須要,則在最後一個元素後添加逗號。