Python誕生
Python是著名的”龜叔
“Guido van Rossum(吉多·范羅蘇姆)
在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個編程語言。
Python語法很多來自C,但又受到ABC語言的強烈影響。來自ABC語言的一些規定直到今天還富有爭議,比如強制縮進。但這些語法規定讓Python容易讀。Guido van Rossum
著名的一句話就是Life is short, you need Python
,譯為:人生苦短,我用Python
截至到目前2016年4月28日
,Python在Tiobe
的排名還是很靠前的,而且近幾年來說Python上升的趨勢已經超過PHP緊隨C#。
查詢網站:http://www.tiobe.com/tiobe_index?page=index
總之,Python就是非常好
、非常好
、非常好
的語言,重要的事情說三遍。
Python實現方式
Python身為一門編程語言,但是他是有多種實現方式的,這里的實現指的是符合Python語言規范的Python解釋程序以及標准庫等。
- Python的實現方式主要分為三大類
- Cpython
- PyPy
- Jpython、IronPython等等類似的實現方式
- CPython
這是Python的官方版本,使用C語言實現,使用最為廣泛,新的語言特性一般也最先出現在這里。
CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),然后運行在Python虛擬機上。
- PyPy
Python(RPython Python)的Python實現版本,原理是這樣的,PyPy運行在CPython(或者其它實現)之上,用戶程序運行在PyPy之上。它的一個目標是成為Python語言自身的試驗場,因為可以很容易地修改PyPy解釋器的實現(因為它是使用Python寫的),PyPy的代碼性能是Cpython的五倍以上。
- 性能對比圖
- Jython
Jython是個Python的一種實現方式,Jython編譯Python代碼為Java字節碼,然后由JVM(Java虛擬機)執行,這意味着此時Python程序與Java程序沒有區別,只是源代碼不一樣。此外,它能夠導入和使用任何Java類像Python模塊。
- IronPython
IronPython是Python的C#實現,並且它將Python代碼編譯成C#中間代碼(與Jython類似),然后運行,它與.NET語言的互操作性也非常好。
安裝Python
Windows安裝Python2.7.11
- 下載Python軟件
64位下載地址:https://www.python.org/ftp/python/2.7.11/python-2.7.11.amd64.msi
32位下載地址:https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi
- 安裝Python軟件
下載下來之后雙擊安裝,安裝時一路下一步下一步即可,Windows一貫的作風,默認的安裝路徑是:C:\Python27
- 配置環境變量
右鍵計算機
—> 屬性
—> 高級系統設置
—> 高級
—> 環境變量
—> 在第二個內容框中找到變量名為Path的一行,雙擊
—> Python安裝目錄追加到變值值中,用;分割
如圖:
如:原來的值``;C:\python27
,切記前面有分號
Windows 10安裝后默認會把環境變量配置好。
- cmd測試
win+r
調出運行窗口,然后輸入cmd
在cmd窗口中輸入python
指令
如果你得到的結果和我一樣,那么你就安裝好了windows
下的python
環境
CentOS升級到Python2.7.11
CentOS6.7
默認自帶Python2.6.6
版本,如果你不需要升級到2.7.11
請跳過這段,如果需要升級請繼續往下看。
- 下載python2.7.11源碼包
下載地址:https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
[root@mosson ~]# wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
- 安裝開發工具包
[root@mosson~]# yum -y groupinstall "debugging Tools"
- 編譯安裝
[root@mosson ~]# tar xf Python-2.7.11.tgz [root@mosson ~]# cd Python-2.7.11 [root@mosson Python-2.7.11]# ./configure -prefix=/usr/local/python2.7.11 [root@mosson Python-2.7.11]# make [root@mosson Python-2.7.11]# make install
- 更改配置
創建鏈接來使系統默認python變為python2.7
[root@mosson Python-2.7.11]# ln -fs /usr/local/python2.7.11/bin/python2.7 /usr/bin/python
查看Python版本
[root@mosson Python-2.7.11]# python -V Python 2.7.11
修改yum配置(否則yum無法正常運行)
[root@mosson Python-2.7.11]# vim /usr/bin/yum #!/usr/bin/python #將第一行改為 #!/usr/bin/python2.6
Python簡單入門
Hello Word
一般情況下程序猿的第一個小程序都是簡單的輸出Hello Word!
,當然Python也不例外,下面就讓我們來用Python輸出一句Hello Word!
吧!
- 創建一個以py結尾的文件
[root@mosson python_code]# touch hello.py
其內容為:
#!/usr/vin/env python print "Hello World!"
- 用Python執行
[root@mosson python_code]# python hello.py Hello Word!
Python代碼執行流程
釋意:當Python執行代碼的時候,會先把源碼讀取到內存當中,然后由Cpython進行編譯,編譯成字節碼,最后由Cpython的虛擬機一行一行的解釋其內容,再輸出到屏幕上,然后釋放內存,退出程序。
pyc文件
執行Python代碼時,如果導入了其他的.py文件,那么,執行過程中會自動生成一個與其同名的.pyc文件,該文件就是Python解釋器編譯之后產生的字節碼。
代碼經過編譯可以產生字節碼;字節碼通過反編譯也可以得到代碼
指定Python解釋器
在Python文件的開頭加入以下代碼就制定了解釋器。
- 第一種方式 告訴shell這個腳本用
/usr/bin/python
執行
#!/usr/bin/python
- 第二種方式 在操作系統環境不同的情況下制定這個腳本用python來解釋。
#!/usr/bin/env python
執行Python文件
執行python文件有兩種方式:
- 第一種執行方式
[root@mosson python_code]# python my.py Life is short, you need Pytho
- 第二種執行方式
[root@mosson python_code]# chmod +x my.py [root@mosson python_code]# ./my.py Life is short, you need Pytho
字符編碼
ASCII
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標准信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(一個字節),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號
顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode
Unicode 缺點:浪費空間如果是字母特殊字符數字的話
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8
一個漢字3個字節
gbk1個漢字是2個字節
UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
所以,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),如果是如下代碼的話:
報錯:ascii碼無法表示中文
#!/usr/bin/env python print("你好,世界") #!/usr/bin/env python # -*- coding: utf-8 -*- print("你好,世界")
代碼注釋:
單行注釋:在代碼前加上#
多行注釋:
""" 注釋內容 """
pyc文件
執行Python代碼時,如果導入了其他的 .py 文件,那么,執行過程中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯之后產生的字節碼。
ps:代碼經過編譯可以產生字節碼;字節碼通過反編譯也可以得到代碼。
Py轉pyc 其實 就是你的程序代碼交給虛擬機轉換成機器可以識別的二進制的過程。 就是字節碼轉換
不是編譯過程
為什么生成pyc文件
緩存的問題。 轉換字節碼的數據寫到硬盤上, 下次執行的時候不用翻譯了。
python中的變量
變量的命名規則:
1 變量名只能是 字母、數字或下划線的任意組合
2 不能以數字開頭
3 不能是python的已用的變量名
例如:['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']
變量賦值:
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "zhangsan" name2 = "licsi"
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "wupeiqi" name2 = name1
模塊導入:
模塊導入是大大簡化你的程序的可讀性。
比如 1.py
#!/usr/bin/env python #_*_coding:utf-8_*_ import 2.py print("hello")
而2.py
#!/usr/bin/env python #_*_coding:utf-8_*_ print("world")
而執行python 1.py結果是
world
hello
大家看到了吧,import xxx.py 就是將這個文件的內容導入進來替換這個import行。
數據類型
按照特征划分
數字類型: 整形: 布爾型:True False 必須大寫第一個字母 長整形: 標准整形: 非整型: 雙精度浮點型 復數 decimal(不是內建類型) 序列類型: 字符串:引號引起來的 元祖:tuple 不可變 列表: 鍵值: 字典: 集合類型: 可變集合 不可變集合
按照可變性划分:
可哈希的不可變數據類型: 數字類型 不可變集合 字符串 元組 可變數據類型 字典 列表 可變集合
流程控制和縮進
注釋:if語句,當且僅當if后的條件為真時才會執行if條件下的代碼塊,
if 多層判斷
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' inp = raw_input(">>>") if inp == "1": print('1') elif inp == "2": print('2') else: print("other")
while 循環
while 條件:
動作
當條件一旦滿足就不會再執行動作
while的退出循環方法1
例子: 打印數字當數字為7 則退出循環
重點:利用了 flag的布爾類型來做賦值控制。
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator'start = 1 flag = True while flag: print(start) if start == 7: flag = False start+=1 print("end")
continue break練習
continue 是跳出本次循環,繼續下次循環
break是跳出本層循環
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' import time i=0 while i<=10: time.sleep(0.1) i+=1 if i == 7: continue print i print("end")
檢測是否是跳出本層循環
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' a=0 b=0 while a<10: while b<3: if b==2: break b+=1 print b a+=1 print a
作業:
練習題 1、使用while循環輸入 1 2 3 4 5 6 8 9 10 2、求1-100的所有數的和 3、輸出 1-100 內的所有奇數 4、輸出 1-100 內的所有偶數 5、求1-2+3-4+5 ... 99的所有數的和 6、用戶登陸(三次機會重試)
num one
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' i=0 while i<=10: time.sleep(0.1) i+=1 if i == 7: continue print i print("end")
num two
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' #1到100求和 j=0 i=1 while i<=100: j+=i i+=1 print j
linux命令行求和
awk 'BEGIN{i=1;do{sum+=i;i++}while (i<=100);print sum}' awk 'BEGIN{i=1;while (i<=100){sum+=i;i++};print sum}' awk 'BEGIN{sum=0;for (i=1;i<=100;i++)sum+=i;print sum}' declare sum=0;for i in `seq 1 100`;do let sum+=$i;done;echo $sum
num three
#!/usr/bin/env python #—*— coding:utf-8 —*— #奇數求和 j = 0 i = 1 while i < 100: j += 1 i += 2 print (j)
num four
#!/usr/bin/env python # -*- coding:utf-8 -*- #偶數求和 i = 0 j = 0 while i < 100: j +=i i += 2 print(j)
num five
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' # 奇數 求和 j=0 i=1 while i<=100: j+=i i+=2 print j #偶數 求和 k=0 l=0 while l<=100: k+=l l+=2 print k print(j-k
三次登錄:
import sys i = 0 while i < 3: #只要用戶登錄異常不超過3次就不斷循環 username = input("請輸入用戶名:") lock_file = open('user_lock.txt','r+') #當用戶輸入用戶名后,打開LOCK 文件 以檢查是否此用戶已經LOCK了 lock_list = lock_file.readlines() for lock_line in lock_list: #循環LOCK文件 lock_line = lock_line.strip('\n') #去掉換行符 if username == lock_line: #如果LOCK了就直接退出 sys.exit('=======WARNING:該賬號 %s 已經被凍結========' % username) user_file = open('user_id.txt','r') #打開帳號文件 user_list = user_file.readlines() for user_line in user_list: #對帳號文件進行遍歷 (user,password) = user_line.strip('\n').split() #分別獲取帳號和密碼信息 if username == user: #如用戶名正常匹配 m = 0 while m < 3: #只要用戶密碼異常不超過3次就不斷循環 passwd = input('請輸入密碼:') #輸入密碼,相對安全 if passwd == password: #密碼正確,提示歡迎登錄 print('HI,%s,歡迎登錄系統' % username) sys.exit(0) #正常退出 else: if m != 2: #m=2時,是最后一次機會,不用在提示還剩余0次機會了 print('用戶 %s 密碼錯誤,請重新輸入,還有 %d 次機會' % (username,2 - m)) m += 1 #密碼輸入錯誤后,循環值增加1 else: lock_file.write(username + '\n') #密碼輸入三次錯誤后,將該用戶追加到LOCK文件 sys.exit('用戶 %s 達到最大登錄次數,請聯系管理員!!' % username) else: pass #當用戶沒匹配時,跳過並繼續循環 else: if i != 2: #i=2時,是最后一次機會,不用在提示還剩余0次機會了 print('用戶 %s 不存在,請重新輸入,還有 %d 次機會' % (username,2 - i)) i += 1 #當用戶輸入錯誤時,循環值增加1 else: sys.exit('用戶 %s 不存在,退出' % username) #用戶輸入三次錯誤后,異常退出 lock_file.close() #關閉lock文件 user_file.close() #關閉user_id文件