最新的TIOBE排行榜,Python趕超PHP佔據第五!!!html
Python能夠應用於衆多領域:python
數據分析 組件集成linux
網絡服務 圖像處理git
數值計算 科學計算等程序員
Python在互聯網企業中的使用狀況:web
Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA等。shell
互聯網公司普遍使用Python來作的事通常有:自動化運維、自動化測試、大數據分析、爬蟲、Web 等。數組
安裝安全
windos - linux 安裝相對比較簡單bash
..略..
PS:linux 更新新版本的python後,會致使yum執行異常,只需從新指引原版本號就行
查看默認Python版本 python -V 一、安裝gcc,用於編譯Python源碼 yum install gcc 二、下載源碼包,https://www.python.org/ftp/python/ 三、解壓並進入源碼文件 四、編譯安裝 ./configure make all make install 五、查看版本 /usr/local/bin/python2.7 -V 六、修改默認Python版本 mv /usr/bin/python /usr/bin/python2.6 ln -s /usr/local/bin/python2.7 /usr/bin/python 七、防止yum執行異常,修改yum使用的Python版本 vi /usr/bin/yum 將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6
1、Python 內部執行過程
本身寫的.py文件是自定義模塊
執行能夠經過終端輸入和文件兩種方式來實現
讀文件-->>詞法-->>語法分析-->>編譯-->>內容-->>執行
2、解釋器
像shell同樣,使用./腳本名時,其第一行頂格寫明指向的解釋器。
#!/usr/bin/env python
3、內部編碼
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼):2**8=256 沒法表示中文
Unicode(統一碼、萬國碼、單一碼):最少由 16 位來表示(2個字節),即:2 **16 = 65536
UTF-8,是對Unicode編碼的壓縮和優化:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存(好處節省磁盤空間)
因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),
腳本中編碼聲明
#!/usr/bin/env python # -*- coding: utf-8 -*-
print "你好,世界"
搞清楚了 ASCII、Unicode 和 UTF-8 的關係,咱們就能夠總結一下如今計算機系統通用的
字符編碼工做方式:
在計算機內存中,統一使用 Unicode 編碼,當須要保存到硬盤或者須要傳輸的時候,就轉
換爲 UTF-8 編碼。
用記事本編輯的時候,從文件讀取的 UTF-8 字符被轉換爲 Unicode 字符到內存裏,編輯完
成後,保存的時候再把 Unicode 轉換爲 UTF-8 保存到文件:
Python 執行 -->>讀進內存 Unicode -->>寫入磁盤 UTF-8
4、註釋
單行:#被註釋內容
多行:"""被註釋內容"""
5、捕獲腳本傳入參數
Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有包括三中:
Python內部提供的模塊
業內開源的模塊
程序員本身開發的模塊
Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print sys.argv
6、pyc文件
執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
兩個命名同樣的.py .pyc文件執行順序
python內部將2文件比較,.py優先
7、變量
一、聲明變量
name
=
"abc"
變量名:name
name變量的值:"abc"
變量的做用:暱稱,其代指內存裏某個地址中保存的內容
變量定義的三條規則:
變量名只能是 字母、數字或下劃線的任意組合
變量名的第一個字符不能是數字
如下關鍵字不能聲明爲變量名
['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']
PS 不一樣大小寫的相同暱稱的變量表明不用的變量名
二、變量賦值
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "abci" name2 = "123"
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "abc" name2 = name1
變量賦值會從新開通內存空間,變量的值指向內存地址的內容。
除以上狀況外,python 自身優化功能:
Python是由C編寫的,多個變量指向同一個值時,會通過預先規定好的範圍進行優化,指向同一個值再也不從新開通內存空間,而是指向同一個內存地址。
>>> a='abc' >>> b='abc' >>> id(a),id(b) (140692465670928, 140692465670928) >>> c=500 >>> d=500 >>> id(c),id(d) (18646952, 18646856) >>> e=10 >>> f=10 >>> id(e),id(f) (18371168, 18371168)
剖析Python源代碼
8、用戶交互
輸入:raw_input() getpass.getpass()
#!/usr/bin/env python # -*- coding:utf-8 -*- import getpass # 將用戶輸入的內容賦值給 name 變量 name = raw_input(">>>") print name # 將用戶輸入的內容賦值給 name 變量 pwd = getpass.getpass(">>>") print pwd
9、流程控制和縮進
If ….else….
If … elif … elif … else
Split
Strip
Len()
While True:
Break
Continue
多層循環
#!/usr/bin/env python # -*- coding:utf-8 -*- import getpass name = raw_input("請輸入用戶名:") # 輸入alex pwd = getpass.getpass("請輸入密碼:") if name == "eric" and pwd == "123": print "登陸成功,普通,123" elif name == "tony" and pwd == "123": print "登陸成功,超級,123" elif name == "alex" and pwd == "123": print "登陸成功,超神,123" else: print "登陸失敗" """ 嵌套 if pwd == "123": if name == "eric": print "eric,普通" elif name == "tony": print " tony,超級" elif name == "alex": print " alex,超神" else: print "登陸失敗" else: print "登陸失敗" """ # eric,普通,123 # tony,超級,123 # alex,超神,123
#_*_ coding:utf-8 _*_ import random #導入模塊 real_num = random.randrange(10) #設置隨機數0~10 #guess_num = raw_input("Please guess the real number:") #輸入的是字符串。 #計算機底層會吧字符串變成一個二進制來表示這個字符串,因此因此字符串和數字 #比較是不會出錯的,但不能這麼比較。 # print type(guese_num) ord(guess_num)#看二進制位 retry_num = 0 #定義輸入的次數 while retry_num < 3: #循環每次提示輸入,最多重試3次 guess_num = raw_input("Please guess the real number:").strip() if len(guess_num) == 0: #若是輸入空格或者回車就從新輸入 continue if guess_num.isdigit(): #判斷字符串裏包含數字是true,而後轉成數字 guess_num = int(guess_num) else: print "you need input a integer instead of string" if guess_num > real_num: print "wrong!you need try smaller!" elif guess_num < real_num: print "wrong!you need try bigger!" else: print "you got it!" break #輸入正確跳出整個while循環 retry_num +=1 #輸入錯誤循環次數加1 else: #當猜錯了執行下面命令 print "The real num is", real_num BUG: 輸如「回車」保持,回車是不能轉intraw_input後面輸入「空格」「回車」會當作一個字符串處理,能夠用用字符串內置的方法strip(),默認會把空格和回車都去掉。這裏須要判斷是否是一個「空格」「或者回車」,每個字符長度是1,輸入空格默認長度也是1
break----continue:
break是負責跳出整個循環,但continue是跳出本次循環,繼續下一次循環。就是說,循環過程當中,若是遇到continue,那這一次循環本應該執行的後面的代碼就不執行了,直接跳過了,直接進行下一次循環了。
'數據類型按特徵劃分':{ '數字類型':{ '整型':['布爾型','長整型','標準整型'], '非整型':['雙精度浮點型','複數','decimal(不是內建類型)'] }, '序列類型':['字符串str','元組tuple','列表list'], '映像類型':'字典dict', '集合類型':['可變集合set','不可變集合frozenset'] }, '數據類型按可變性劃分':{ '可哈希的不可變數據類型':['數字類型','字符串str','元組tuple','不可變集合frozenset'], '可變數據類型':['字典dict','可變集合set','列表list'] }
一、數字
2 是一個整數的例子。 長整數 不過是大一些的整數。 3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裏,52.3E-4表示52.3 * 10-4。 (-5+4j)和(2.3-4.6j)是複數的例子。
int(整型)
>>> a = True >>> if a :print "it is ok" ... it is ok True 是1 Flase是0 C語言中須要定義整型類型,若是超出就報錯,python能夠自動轉換。
"hello world"
字符串格式化
_author_ = "xu" name = raw_input("please input your name:") #age = int(raw_input("please input your age:")) age = input("please input your age:") sex = raw_input("please input your sex:") job = raw_input("please input your job:") print '''information of %s staff NAME:%s AGE:('%d') %f %.2f SEX:%s JOB:%s ''' %(name,name,age,age,age,sex,job)
PS: 字符串是 %s;整數 %d;浮點數%f
字符串經常使用功能:
•移除空白
•分割
•長度
•索引
•切片
四、列表
建立列表:
name_list = ['alex', 'seven', 'eric'] 或 name_list = list(['alex', 'seven', 'eric'])
基本操做:
•索引
•切片
•追加
•刪除
•長度
•切片
•循環
•包含
切片:
>>> shopping_list ['Iphone', 'Mac', 'Bike', 'Coffee', 'Car', 'Clothes', 'Food', 'Gift'] >>> shopping_list[0:3] #取0到第3個元素,不包括第4個 ['Iphone', 'Mac', 'Bike'] >>> shopping_list[:3] #同上,取0到第3個元素,不包括第4個,0能夠不寫 ['Iphone', 'Mac', 'Bike'] >>> shopping_list[2:5] #取第3至第5個元素 ['Bike', 'Coffee', 'Car'] >>> shopping_list[:-3] #取從0至倒數第3個元素 ['Iphone', 'Mac', 'Bike', 'Coffee', 'Car'] >>> shopping_list[-3:] #取最後3個元素 ['Clothes', 'Food', 'Gift'] >>> shopping_list[1:8:2] #從1至8隔一個取一個,後面的2是步長,即每隔幾個元素取一個 ['Mac', 'Coffee', 'Clothes', 'Gift'] >>> shopping_list[::2] #從頭到位每隔一個取一個 ['Iphone', 'Bike', 'Car', 'Food']
五、元祖
ages = (11, 22, 33, 44, 55) 或 ages = tuple((11, 22, 33, 44, 55))
基本操做:
•索引
•切片
•循環
•長度
•包含
tuple和list很是相似,可是tuple一旦初始化就不能修改。它也沒有append(),insert()這樣的方法。其餘獲取元素的方法和list是同樣的,但不能賦值成另外的元素。由於tuple不可變,因此代碼更安全。
只有1個元素的tuple定義時必須加一個逗號,,來消除歧義:
>>> t = (1,) >>> t (1,)
六、字典(無序)
person = {"name": "mr.wu", 'age': 18} 或 person = dict({"name": "mr.wu", 'age': 18})
經常使用操做:
•索引
•新增
•刪除
•鍵、值、鍵值對
•循環
•長度
for key in date : print key,date[key] 和下面的到的結果是同樣的,但有區別。前者在循環取的時候效率相對高不少。 for key,val in date.items(): print key,val
11、運算
http://www.runoob.com/python/python-operators.html
12、文件的基本操做
file_obj = file("文件路徑","模式")
不少時候咱們寫的程序都須要對文件進行讀、寫操做,好比你要分析日誌、存儲數據等,和其它語言同樣,Python也內置了對文件進行操做的函數,下面一塊兒來學習一下。
讀寫文件前,咱們先必須瞭解一下,在磁盤上讀寫文件的功能都是由操做系統提供的,現代操做系統不容許普通的程序直接操做磁盤,因此,讀寫文件就是請求操做系統打開一個文件對象(一般稱爲文件描述符),而後,經過操做系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)
1. 除了r\w\a三種最經常使用處理文件的模式以外,還有如下幾種:
2. r+ 以讀寫模式打開,其實跟追加的效果是同樣的,即能讀,又能寫,但寫實際上是追加內容,可是若是文件不存在的話,不會像a同樣建立文件,而是報錯
3. w+ 以寫讀模式打開,
4. a+ 以追加和讀的模式打開
5. rb,wb,ab 是指以二進制的模式打開並處理文件,當處理的文件是非文本文件時,就應該以二進制的格式打開文件,但有的同窗說了,我不加b也不出錯呀,沒錯,即便不加b,file也能正常處理二進制文件,可是當你的程序涉及到跨平臺時,就可能有問題了,由於在Linux和Windows的換行標誌位是不同的,Linux是」\n」,Windows是」\r\n」,因此Windows上的文件在Linux下通常會在換行處顯示^M,須要特別轉換一下才能正常處理。 當你把Windows的文件copy到Linux並用Python file方法處理時,你在打開模式上加上b,Python就會幫你把^M轉成\n,不然你的程序就不知道該在哪換行了嘍!因此,咱們建議,若是你預計可能會處理Windows上產生的文件,那仍是默認就加上b吧。
文件其它方法