自從20世紀90年代初Python語言誕生至今,它逐漸被普遍應用於處理系統管理任務和Web編程。html
Python的創始人爲Guido van Rossum,人稱「龜叔」。1989年聖誕節期間,在阿姆斯特丹,Guido爲了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作爲ABC 語言的一種繼承。之因此選中Python(大蟒蛇的意思)做爲程序的名字,是由於他是一個叫Monty Python的喜劇團體的愛好者。ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言很是優美和強大,是專門爲非專業程序員設計的。可是ABC語言並無成功,究其緣由,Guido 認爲是非開放形成的。Guido 決心在Python 中避免這一錯誤。同時,他還想實如今ABC 中閃現過但不曾實現的東西。就這樣,Python在Guido手中誕生了。能夠說,Python是從ABC發展起來,主要受到了Modula-3(另外一種至關優美且強大的語言,爲小型團體所設計的)的影響。而且結合了Unix shell和C的習慣。python
Python 已經成爲最受歡迎的程序設計語言之一。2011年1月,它被TIOBE編程語言排行榜評爲2010年度語言。自從2004年之後,python的使用率是呈線性增加。因爲Python語言的簡潔、易讀以及可擴展性,在國外用Python作科學計算的研究機構日益增多,一些知名大學已經採用Python教授程序設計課程。例如卡耐基梅隆大學的編程基礎、麻省理工學院的計算機科學及編程導論就使用Python語言講授。衆多開源的科學計算軟件包都提供了Python的調用接口,例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫ITK。而Python專用的科學計算擴展庫就更多了,例如以下3個十分經典的科學計算擴展庫:NumPy、SciPy和matplotlib,它們分別爲Python提供了快速數組處理、數值運算以及繪圖功能。所以Python語言及其衆多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數據、製做圖表,甚至開發科學計算應用程序。linux
2、Python能幹什麼程序員
3、Python的優缺點shell
4、編程風格
編程
一、語法要求
–縮進統一
同一級別的代碼必須一致!(而且建議全部級別的代碼的縮進建議是相同的--必須,開發規範裏建議4個空格)建議不要用table由於若是想把代碼在windows上運行,linux和windows的table的定義不一樣!!!!
好的編輯器能提升開發代碼的效率!
全部python,第一行必定要頂到行頭! 同一級別的新的都要頂到行頭。vim
二、設計哲學windows
Python的設計哲學是「優雅」、「明確」、「簡單」。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確沒有或者不多有歧義的語法。這些準則被稱爲「 Python格言」。在Python解釋器內運行import this能夠得到完整的列表數組
1.優美勝於醜陋(Python 以編寫優美的代碼爲目標)瀏覽器
2.明瞭勝於晦澀(優美的代碼應當是明瞭的,命名規範,風格類似)
3.簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)
4.複雜勝於凌亂(若是複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔,多加註釋!)
5.扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
6.間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題,一行代碼不能超過80個字符,你能夠換行或起一個新的邏輯來寫)
7.可讀性很重要(優美的代碼是可讀的)
8.即使假借特例的實用性之名,也不可違背這些規則(這些規則至高無上),覺對不容許特列必須按照這個規則
9.不要包容全部錯誤,除非你肯定須要這樣作(精準地捕獲異常,不寫 except:pass 風格的代碼)
10.當存在多種可能,不要嘗試去猜想!
11.而是儘可能找一種,最好是惟一一種明顯的解決方案(若是不肯定,就用窮舉法)
12.雖然這並不容易,由於你不是 Python 之父(這裏的 Dutch 是指 Guido )
13.作也許好過不作,但不假思索就動手還不如不作(動手以前要細思量)
14.若是你沒法向人描述你的方案,那確定不是一個好方案;反之亦然(方案測評標準)
15.命名空間是一種絕妙的理念,咱們應當多加利用(倡導與號召
三、變量
標識符的第一個字符必須是字母表中的字母(大寫或小寫)或者一個下劃線(‘ _ ’)
標識符名稱的其餘部分能夠由字母(大寫或小寫)、下劃線(‘ _ ’)或數字(0-9)組成。
有效 標識符名稱的例子有i、__my_name、name_23和a1b2_c3。
無效 標識符名稱的例子有2things、this is spaced out和my-name。
標識符名稱是對大小寫敏感的。例如,myname和myName不是一個標識符。注意前者中的小寫n和後者中的大寫N。
常量:數值不變的
變量:數值會變更的量
在python中沒有常量的,全部的數值均可以改變,可是他依然有個常量的概念,可是是人爲的你不去改變他,定義一個常量應該用大寫的形式。
AGE = 10 這個就是常量,他是大寫的!是約定俗成的。可是他是能夠改的!
name = 'Tim Luo' 這個是變量
##這裏須要注意下,設置變量的時候不能設置python自帶的內置方法好比type
如下關鍵字不能聲明爲變量名
1 ['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']
變量的起名的方式就是標識符名稱,經過標識符去調用內存中的數據。
5、Python 解釋器
6、Python 環境搭建
Python下載
Python最新源碼,二進制文檔,新聞資訊等能夠在Python的官網查看到:
Python官網:http://www.python.org/
你能夠在一下連接中下載Python的文檔,你能夠下載 HTML、PDF 和 PostScript 等格式的文檔。
Python文檔下載地址:www.python.org/doc/
Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。
您須要下載適用於您使用平臺的二進制代碼,而後安裝Python。
若是您平臺的二進制代碼是不可用的,你須要使用C編譯器手動編譯源代碼。
編譯的源代碼,功能上有更多的選擇性, 爲python安裝提供了更多的靈活性。
如下爲不一樣平臺上安裝Python的方法:
如下爲在Unix & Linux 平臺上安裝 Python 的簡單步驟:
執行以上操做後,Python會安裝在 /usr/local/bin 目錄中,Python庫安裝在/usr/local/lib/pythonXX,XX爲你使用的Python的版本號。
如下爲在 Window 平臺上安裝 Python 的簡單步驟:
最近的Macs系統都自帶有Python環境,可是自帶的Python版本爲舊版本,你能夠經過連接http://www.python.org/download/mac/ 查看MAC上Python的新版功能介紹。
MAC上完整的Python安裝教程你能夠查看:http://homepages.cwi.nl/~jack/macpython/index.html
環境變量配置
程序和可執行文件能夠在許多目錄,而這些路徑極可能不在操做系統提供可執行文件的搜索路徑中。
path(路徑)存儲在環境變量中,這是由操做系統維護的一個命名的字符串。這些變量包含可用的命令行解釋器和其餘程序的信息。
Unix或Windows中路徑變量爲PATH(UNIX區分大小寫,Windows不區分大小寫)。
在Mac OS中,安裝程序過程當中改變了python的安裝路徑。若是你須要在其餘目錄引用Python,你必須在path中添加Python目錄。
setenv PATH "$PATH:/usr/local/bin/python"
, 按下"Enter"。export PATH="$PATH:/usr/local/bin/python"
,按下"Enter"。PATH="$PATH:/usr/local/bin/python"
, 按下"Enter"。注意: /usr/local/bin/python 是Python的安裝目錄。
在環境變量中添加Python目錄:
path %path%;C:\Python
, 按下"Enter"。注意: C:\Python 是Python的安裝目錄。
下面幾個重要的環境變量,它應用於Python:
變量名 | 描述 |
---|---|
PYTHONPATH | PYTHONPATH是Python搜索路徑,默認咱們import的模塊都會從PYTHONPATH裏面尋找。 |
PYTHONSTARTUP | Python啓動後,先尋找PYTHONSTARTUP環境變量,而後執行此文件中變量指定的執行代碼。 |
PYTHONCASEOK | 加入PYTHONCASEOK的環境變量, 就會使python導入模塊的時候不區分大小寫. |
PYTHONHOME | 另外一種模塊搜索路徑。它一般內嵌於的PYTHONSTARTUP或PYTHONPATH目錄中,使得兩個模塊庫更容易切換。 |
7、 Python入門
1、第一句python
vim hello.py 建立一個文件
1
2
3
4
|
#!//usr/bin/env python
#-*- conding:utf-8 -*-
print "Hello World"
|
執行:
1
2
3
|
python hello.py 便可
或者增長執行權限:chmod 755 hello.py
. / hello.py
|
解釋:
1
2
|
1 #!//usr/bin/env python #腳本用env啓動的緣由,是由於腳本解釋器在linux中可能被安裝於不一樣的目錄,env能夠在系統的PATH目錄中查找。同時,env還規定一些系統環境變量。env就是:envirnment 環境變量)
2 # -*- coding: utf-8 -*- 指定編碼類型爲utf-8 (詳情繼續閱讀)
|
2、編碼
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),因此若是不指定編碼類型,若是有中文就會報錯。
3、Python的工做過程
python 把代碼讀到內存 二、詞法語法分析 三、放到編譯器 ---》 生成字節碼 四、執行字節碼 ---》生成機器碼 CPU執行
4、執行腳本傳入參數
Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有包括三中:
Python內部提供的模塊
業內開源的模塊
程序員本身開發的模塊
Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數
1
2
3
4
5
6
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print sys.argv
|
5、pyc文件
執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。(任何字節碼經過反編譯均可以獲得代碼)
6、變量
字符串的值是不能被修改的,他在內存裏是連續的,若是想改的話必須在後面預留因此不支持修改!
字符串特性,一旦修改,從新建立
例子:
1
2
3
|
name1 = "tianshuai"
name2 = name1
這裏而後把name1 = "shuaige"
|
name2 變不變呢?實際上是不變的結合上面的規則來:字符串特性,一旦修改,從新建立
name1 = "shuaige" name1的值變了,他會從新開闢一塊內存空間!
注:
1
2
|
name1 = "tianshuai"
name2 = "tianshuai"
|
這裏雖然他們的內存地址是相同的可是:他們的原理是各自在內存裏開闢了一塊內存空間,python給他進行了優化而已。有個池的概念(把你最經常使用的值作一個指向)!
集合又不相同:
1
2
|
name1 = [ 'tianshuai' , 'eric' , 'alex' ]
若是把name2 = name1
|
name1 這個集合增長一個,如今name2 變不變呢?會變的集合和字符串不一樣他的各個元素不是連續的,因此name2=name1指向後,name1增長 一個元素不會開闢一塊新的空間,name2就會跟着改變。
7、輸入
1
2
3
4
5
6
|
#!/usr/bin/env python# -*- coding: utf-8 -*-
# 將用戶輸入的內容賦值給 name 變量
name = input ( "請輸入用戶名:" )
# 打印輸入的內容print name
|
輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法,即:
8、流程控制
if...else 和 if....elif...elif..........else
需求1、用戶身份認證
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import getpass
name = raw_input ( "請輸入用戶名:" )
pwd = raw_input ( "請輸入密碼:" )
if name = = "tianshuai" and pwd = = "123" :
print "登陸成功"
else :
print "登陸失敗"
|
測試:
1
2
3
4
5
6
7
8
9
|
root@tim: / home / tim # python tianshuai.py
請輸入用戶名:tianshuai
請輸入密碼:
登陸成功
root@tim: / home / tim # python tianshuai.py
請輸入用戶名:tianshuai
請輸入密碼:
登陸失敗
root@tim: / home / tim #
|
需求2、根據用戶輸入內容輸出其權限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''
tianshuai--->普通用戶
eric--->管理用戶
alex--->超級用戶
'''
name = raw_input ( "請輸入用戶名:" )
if name = = "tianshuai" :
print "普通用戶"
elif name = = "eric" :
print "管理用戶"
elif name = = "alex" :
print "超級用戶"
else :
print "沒有此用戶"
|
輸出結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
root@tim: / home / tim # python tianshuai.py
請輸入用戶名:tianshuai
普通用戶
root@tim: / home / tim # python tianshuai.py
請輸入用戶名:eric
管理用戶
root@tim: / home / tim # python tianshuai.py
請輸入用戶名:alex
超級用戶
root@tim: / home / tim # python tianshuai.py
請輸入用戶名:lksjdfsdf
沒有此用戶
root@tim: / home / tim #
|
for i in range(100) and for i in xrange(1,100)
需求1、猜數字遊戲
有3次機會,若是3次中沒有猜中給予提示,3次都沒有猜中,鼓勵!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import random #隨機模塊
rand_num = random.randrange( 10 )
for i in range ( 3 ):
guess_num = int ( raw_input ( "請猜想數字:" ))
if guess_num = = rand_num:
print "太棒了你猜對了"
break
elif guess_num > rand_num:
print "你猜想的有點大了,請嘗試小點的數字"
else :
print "你猜想的有點小了,請嘗試大點的數字"
else :
print "不要灰心,此次只是運氣很差,請下次嘗試"
print "這個真正的數字是:%" % rand_num
|
輸出結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
root@tim: / home / tim # python tianshuai.py
請猜想數字: 8
你猜想的有點大了,請嘗試小點的數字
請猜想數字: 7
你猜想的有點大了,請嘗試小點的數字
請猜想數字: 6
你猜想的有點大了,請嘗試小點的數字
不要灰心,此次只是運氣很差,請下次嘗試
這個真正的數字是: 6
root@tim: / home / tim # python tianshuai.py
請猜想數字: 5
太棒了你猜對了
這個真正的數字是: 5
|
while 循環
他的原理是:當條件爲真的時候運行,當條件爲假的時候中止!
沒有一個規定次數,不設置條件永遠循環下去。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
count = 0
while True :
count + = 1
print "loop" ,count
time.sleep( 3 )
#這個循環3秒鐘自+1 ,後無線循環只要這個條件爲」真「,就無限循環下去
那看下下面的例子
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
cout = 0
while cout < 3 :
cout + = 1
print "shuai" ,cout
time.sleep( 3 )
#這個循環每3秒循環一次,當條件cout < 3的時候爲真(本身設置的條件),當cout 不小於3的時候爲假(false)中止。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
import random
rand_num = random.randrange( 10 )
try_cout = 0
while try_cout < 3 :
guess_num = int ( raw_input ( "請輸入猜想的數字:" ))
if guess_num > 10 :
print "輸入的數字超出範圍了"
continue
if guess_num = = rand_num:
print "哇!太棒了你猜對了"
break
elif guess_num < rand_num:
print "你猜的數字有點小了,請嘗試大點的數字"
else :
print "你猜的數字有點大了,請嘗試小點的數字"
try_cout + = 1
else :
print "不要灰心你,此次只是運氣很差,請下次嘗試"
print "這個真正的數字是:%d" % rand_num
#當執行到guess_num> 10 若是你輸入的是大於10的數字那麼將會執行continue,就會跳出檔次循環,沒有執行try_cout +=1 因此沒有計數!
|
注:continue 是跳出當前循環,break是跳出整個循環!
有個需求,我想返回個人上層怎麼作,用標識位!以下面的例子:
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
while True :
print "我是第一層"
while True :
print "我是第二層"
while True :
print "我是第三層"
|
這就是個死循環,當執行到第三個循環的時候就無限循環,這裏有人回想,用break行不行,不行以下:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
while True :
print "我是第一層"
break
while True :
print "我是第二層"
break
while True :
print "我是第三層"
break
|
這個的輸出結果:
1
2
|
root@tim: / home / tim # python tianshuai.py
我是第一層
|
就只執行了第一個循環就跳出,不咱們想要的效果,那就用到「標誌位」了,工做中也有不少地方用到他:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
count = 0
while True :
print "我是第一層"
jump_1_flag = False
while True :
print "我是第二層"
jump_2_flag = False
while True :
count + = 1
print "我是第三層"
if count > 3 :
jump_2_flag = True
break
if jump_2_flag:
print "第三層跳到我這裏來了,我也要跳到第一層"
jump_1_flag = True
break
if jump_1_flag:
print "第二層和第三層跳到第一層了,我也要跳"
break
|
執行結果:
9、Pthon運算符
Python算術運算符:
操做符 | 描述符 | 例子 |
---|---|---|
+ | 加法 - 對操做符的兩側增長值 | a + b = 30 |
- | 減法 - 減去從左側操做數右側操做數 | a - b = -10 |
* | 乘法 - 相乘的運算符兩側的值 | a * b = 200 |
/ | 除 - 由右側操做數除以左側操做數 | b / a = 2 |
% | 模 - 由右側操做數和餘返回除以左側操做數 | b % a = 0 |
** | 指數- 執行對操做指數(冪)的計算 | a**b = 10 的冪 20 |
// | 地板除 - 操做數的除法,其中結果是將小數點後的位數被除去的商。 | 9//2 = 4 而 9.0//2.0 = 4.0 |
1
2
3
4
5
6
7
8
|
>>> a = 21 >>> b = 10
>>> c = 0
>>> c = a + b ; print c
31 >>> c = a - b ; print c11>>> c = a * b ; print c210
>>> c = c / b ; print c
21
>>> c = c % b ; print c
1
|
Python的比較操做符:
運算符 | 描述 | 示例 |
---|---|---|
== | 檢查,兩個操做數的值是否相等,若是是則條件變爲真。 | (a == b) 不爲 true. |
!= | 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 | (a != b) 爲 true. |
<> | 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 | (a <> b) 爲 true。這個相似於 != 運算符 |
> | 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 | (a > b) 不爲 true. |
< | 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 | (a < b) 爲 true. |
>= | 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 | (a >= b) 不爲 true. |
<= | 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 | (a <= b) 爲 true. |
1
2
3
4
5
6
7
8
|
>>> a = 21 >>> b = 10
>>> c = 0
>>> c = a + b ; print c
31 >>> c = a - b ; print c11>>> c = a * b ; print c210
>>> c = c / b ; print c
21
>>> c = c % b ; print c
1
|
Python邏輯運算符:
運算符 | 描述 | 示例 |
---|---|---|
and | 所謂邏輯與運算符。若是兩個操做數都是真的,那麼則條件成立。 | (a and b) 爲 true. |
or | 所謂邏輯OR運算符。若是有兩個操做數都是非零而後再條件變爲真。 | (a or b) 爲 true. |
not | 所謂邏輯非運算符。用於反轉操做數的邏輯狀態。若是一個條件爲真,則邏輯非運算符將返回false。 | not(a and b) 爲 false.
|
例子:
and
運算,都爲真時爲真
>>>
9
>
8
and
9
<
10
True
>>>
9
>
8
and
9
>
10
False
or
運算,有一個爲真的時候便可爲真
>>>
9
>
8
or
9
>
10
True
>>>
9
<
8
or
9
>
10
False
>>>
not
運算,假爲真真爲假
>>>
not
6.2
<
=
6
True
>>>
not
6.2
>
=
6
False
>>>
Python賦值運算符:
運算符 | 描述 | 示例 |
---|---|---|
= | 簡單的賦值運算符,賦值從右側操做數左側操做數 | c = a + b將指定的值 a + b 到 c |
+= | 加法AND賦值操做符,它增長了右操做數左操做數和結果賦給左操做數 | c += a 至關於 c = c + a |
-= | 減AND賦值操做符,它減去右邊的操做數從左邊操做數,並將結果賦給左操做數 | c -= a 至關於 c = c - a |
*= | 乘法AND賦值操做符,它乘以右邊的操做數與左操做數,並將結果賦給左操做數 | c *= a 至關於 c = c * a |
/= | 除法AND賦值操做符,它把左操做數與正確的操做數,並將結果賦給左操做數 | c /= a 至關於= c / a |
%= | 模量AND賦值操做符,它須要使用兩個操做數的模量和分配結果左操做數 | c %= a is equivalent to c = c % a |
**= | 指數AND賦值運算符,執行指數(功率)計算操做符和賦值給左操做數 | c **= a 至關於 c = c ** a |
//= | 地板除,並分配一個值,執行地板除對操做和賦值給左操做數 | c //= a 至關於 c = c // a |
1
2
3
4
5
6
7
8
|
>>> a = 21
>>> b = 10
>>> c = 0
>>>
>>> c = a + b
>>> c + = a ; print c
52
>>> c + = a is c = c + a
|