十五分鐘快速入門系列 Python基礎
Python是一種面向物件的解釋型語言, 原始碼和直譯器CPython遵循 GPL協議。
年份 | 事件 |
---|---|
1989 | 荷蘭人Guido van Rossum發明 |
1991 | 第一個公開發行版發行 |
當前版本 | 3.5.2 |
TIOBE年度語言
被TIOBE程式語言排行榜2007/2010兩度評為年度語言,其他同樣擁有這一殊榮的在總多的語言中目前只有Object-C和Java加上今年新晉的Go
年份 | 年度語言 |
---|---|
2003年 | C++ |
2004年 | PHP |
2005年 | Java |
2006年 | Ruby |
2007年 | Python |
2008年 | C |
2009年 | Go |
2010年 | Python |
2011年 | Objective-C |
2012年 | Objective-C |
2013年 | Transact-SQL |
2014年 | JavaScript |
2015年 | Java |
2016年 | Go |
安裝
Linux或者Unix一般都會預設安裝,下載或者文件查詢可以參照如下連結
專案 | 連結 |
---|---|
官網 | https://www.python.org |
下載 | https://www.python.org/downloads/ |
文件 | https://www.python.org/doc/ |
環境變數:PATH
將Python的安裝目錄加入到PATH中即可
Python自身環境變數
環境變數名 | 詳細 |
---|---|
PYTHONPATH | PYTHONPATH是Python搜尋路徑,預設我們import的模組都會從PYTHONPATH裡面尋找。 |
PYTHONSTARTUP | Python啟動後,先尋找PYTHONSTARTUP環境變數,然後執行此檔案中變數指定的執行程式碼。 |
PYTHONCASEOK | 加入PYTHONCASEOK的環境變數, 就會使python匯入模組的時候不區分大小寫. |
PYTHONHOME | 另一種模組搜尋路徑。它通常內嵌於的PYTHONSTARTUP或PYTHONPATH目錄中,使得兩個模組庫更容易切換。 |
版本確認
python版本確認可以通過如下命令進行
[root@liumiaocn ~]# python --versionPython 2.7.5[root@liumiaocn ~]#
- 1
- 2
- 3
第一個Helloworld.py
內容:Helloworld.py
#!/usr/bin/pythonprint "Hello World"
- 1
- 2
執行:python Helloworld.py
結果
[root@liumiaocn ~]# python Helloworld.pyHello World[root@liumiaocn ~]#
- 1
- 2
- 3
#!/usr/bin/python為第一行資訊,和shell指令碼一樣,是用來說明解釋所用的shell或者python所在路徑。
指導思想
The Zen of Python:There should be one– and preferably only one –obvious way to do it.同時有意的設計限制性很強的語法,比如縮排不正確可能通過編譯的語言大概除此之外少有分店。如下程式碼將不能通過編譯,會提示你”expected an indented block”,只有在第3行的print前加一個空格才能通過。其實仔細確認一下可能也會理解,因為在python中不像很多語言用{}來區分程式碼塊。
#!/usr/bin/pythonif True:print "Hello World"
- 1
- 2
- 3
確認
[root@liumiaocn ~]# cat IndentSample.py#!/usr/bin/pythonif True:print "Hello World"[root@liumiaocn ~]# python IndentSample.py File "IndentSample.py", line 3 print "Hello World" ^IndentationError: expected an indented block[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
加上一個空格的縮排, 則能正常執行。
[root@liumiaocn ~]# cp IndentSample.py IndentSampleFixed.py[root@liumiaocn ~]# vi IndentSampleFixed.py[root@liumiaocn ~]# diff IndentSample.py IndentSampleFixed.py3c3< print "Hello World"---> print "Hello World"[root@liumiaocn ~]# python IndentSampleFixed.pyHello World[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
所以,在Python裡,縮排還真不是小事,縮排表示塊的開始,逆縮排表示塊的結束。把這件事情重視起來,統一縮排必須上升到上綱上線的地步,不然,連編譯都通不過的程式碼談什麼質量呢。
python保留字
python主要的保留字如下所示,全為小寫
保留字 | 保留字 | 保留字 |
---|---|---|
and | exec | not |
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
大小寫敏感
Python屬於大小寫敏感的程式語言,不過不敏感的語言也越來越少了
多行的寫法
使用連線符:\
sum = 1 + \ 2 + \ 3print sum
- 1
- 2
- 3
- 4
{}或[]或()中不需要使用連線符
註釋
註釋型別 | 註釋Sample |
---|---|
單行註釋 | 註釋內容 |
單行註釋 | sum=1+1 #註釋內容 |
多行註釋 | 三個單引號開始 到 三個單引號結束中間的內容全為註釋 |
多行註釋 | 三個雙引號開始 到 三個雙引號結束中間的內容全為註釋 |
幫助
使用python的線上幫助,比如string相關的方法的方法,使用如下方法(help檢視詳細文件,dir檢視方法列表)
>>> import string>>> help(string)>>> dir(string)
- 1
- 2
- 3
python的各種庫確認:ls -l /usr/lib64/python*/*.py
變數和作用域
python的變數根據其定義的位置分為全域性變數和區域性變數兩種。區域性變數只能用於被宣告的函式內部,而全域性則可在整個程式範圍內使用。
標準資料型別
python支援的標準資料型別
專案 | 型別 | 說明 |
---|---|---|
Numbers | 數字 | 支援int/float/long/complex |
String | 字串 | |
List | 列表 | 類似陣列。下標從0開始,-1表示最後一個元素 |
Tuple | 元組 | 類似只讀陣列 |
Dictionary | 字典 | 類似Hash |
python所支援的複數型別complex的虛部和實部的型別為float,一般表示為complex(a,b)
資料型別轉換函式
函式 | 描述 |
---|---|
int(x [,base]) | 將x轉換為一個整數 |
long(x [,base] ) | 將x轉換為一個長整數 |
float(x) | 將x轉換到一個浮點數 |
complex(real [,imag]) | 建立一個複數 |
str(x) | 將物件 x 轉換為字串 |
repr(x) | 將物件 x 轉換為表示式字串 |
eval(str) | 用來計算在字串中的有效Python表示式,並返回一個物件 |
tuple(s) | 將序列 s 轉換為一個元組 |
list(s) | 將序列 s 轉換為一個列表 |
set(s) | 轉換為可變集合 |
dict(d) | 建立一個字典。d 必須是一個序列 (key,value)元組。 |
frozenset(s) | 轉換為不可變集合 |
chr(x) | 將一個整數轉換為一個字元 |
unichr(x) | 將一個整數轉換為Unicode字元 |
ord(x) | 將一個字元轉換為它的整數值 |
hex(x) | 將一個整數轉換為一個十六進位制字串 |
oct(x) | 將一個整數轉換為一個八進位制字串 |
常見比較和判斷
型別判斷例
判斷內容 | 詳細說明 |
---|---|
是否數字型別 | type(x) is types.IntType 需要import types |
是否數字型別 | type(x) == types(0) |
是否String型別 | type(x) is types.StringType 需要import types |
是否String型別 | type(x) is type(” “) |
條件判斷
條件判斷入門例項
[root@liumiaocn ~]# cat basic-if1.py#!/usr/bin/pythonscore = 50if score < 60 : print 'E'elif score < 70 : print 'D'elif score < 80 : print 'C'elif score < 90 : print 'B'else : print 'A'[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
執行確認
[root@liumiaocn ~]# python basic-if1.pyE[root@liumiaocn ~]#
- 1
- 2
- 3
迴圈控制
迴圈控制入門例項
[root@liumiaocn ~]# cat basic-loop.py#!/usr/bin/pythonlevel = 0while level < 10 : cnt = 0 while cnt < 10-level : cnt = cnt + 1 print(" ") , ascnt = 0 while ascnt < 2*level-1 : ascnt = ascnt + 1 print("*") , print("") level = level + 1[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
執行
[[email protected] ~]# python basic-loop.py * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *[[email protected] ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
函式
使用def進行定義,簡單示例如下:
[root@liumiaocn ~]# cat basic-func.py#!/usr/bin/pythondef hellofun( str ): print "Hello : ", print str; return;hellofun("liumiao")[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
執行確認
[root@liumiaocn ~]# python basic-func.pyHello : liumiao[root@liumiaocn ~]#
- 1
- 2
- 3
debug
除錯有很多種方式,使用pdb(python debugger)是最常見的方式也不受IDE等的限制,此處簡單介紹pdb的用法
gdb命令 | 描述 |
---|---|
break 或 b | 設定斷點 |
continue 或 c | 繼續執行程式 |
list 或 l | 檢視當前行的程式碼段 |
step 或 s | 進入函式 |
return 或 r | 執行程式碼直到從當前函式返回 |
exit 或 q | 中止並退出 |
next 或 n | 執行下一行 |
pp | 列印變數的值 |
help | 幫助 |
執行方式:python -m pdb python指令碼名稱
除錯示例
對上文的迴圈例子的指令碼使用pdb進行除錯如下:
[root@liumiaocn ~]# python -m pdb basic-loop.py> /root/basic-loop.py(3)<module>()-> level = 0(Pdb) l 很多與gdb使用方式都一樣,l for list,列出上下文source 1 #!/usr/bin/python 2 3 -> level = 0 4 while level < 10 : 5 cnt = 0 6 while cnt < 10-level : 7 cnt = cnt + 1 8 print(" ") , 9 10 ascnt = 0 11 while ascnt < 2*level-1 :(Pdb) b 11 設定斷點Breakpoint 1 at /root/basic-loop.py:11(Pdb) c 繼續執行 > /root/basic-loop.py(11)<module>()-> while ascnt < 2*level-1 :(Pdb) pp ascnt 查詢變數值0(Pdb) p cnt10(Pdb) c > /root/basic-loop.py(11)<module>()-> while ascnt < 2*level-1 :(Pdb) c* > /root/basic-loop.py(11)<module>()-> while ascnt < 2*level-1 :(Pdb) c > /root/basic-loop.py(11)<module>()-> while ascnt < 2*level-1 :(Pdb) c* > /root/basic-loop.py(11)<module>()-> while ascnt < 2*level-1 :(Pdb) c* > /root/basic-loop.py(11)<module>()-> while ascnt < 2*level-1 :(Pdb) c* > /root/basic-loop.py(11)<module>()-> while ascnt < 2*level-1 :(Pdb) help 檢視幫助Documented commands (type help <topic>):========================================EOF bt cont enable jump pp run unta c continue exit l q s untilalias cl d h list quit step upargs clear debug help n r tbreak wb commands disable ignore next restart u whatisbreak condition down j p return unalias whereMiscellaneous help topics:==========================exec pdbUndocumented commands:======================retval rv(Pdb) clear 清除斷點Clear all breaks? y(Pdb) c* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *The program finished and will be restarted> /root/basic-loop.py(3)<module>()-> level = 0(Pdb) q 退出[root@liumiaocn ~]#
- 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
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
總結
至此,基本的詞法,簡單的語法應該基本能寫了,問題解決時候的debug也有些微涉獵,很基礎的問題應該可以接觸了。但是這還遠遠不夠,需要我們在實際的工作中慢慢的升級我們的技能。
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow