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文件

