python入門手冊 非正式介紹語言及體系相關(guān)基本知識和概念。
目的:能夠閱讀和編寫模塊或程序。
參考(https://www.runoob.com/manual/pythontutorial/docs/html/)
1
2 傳遞模式
參數(shù)傳遞 。import sys 來獲取這個列表,調(diào)用解釋器時,腳本名和附加參數(shù)傳入一個名為 sys.argv 的字符串列表。
交互模式。這種模式下它根據(jù) 主提示符 來執(zhí)行,主提示符通常標(biāo)識為三個大于號 (>>>);繼續(xù)的部分被稱為 從屬提示符,由三個點標(biāo)識 (...),需要在最后多輸入一個空行,表示多行命令結(jié)束。
3 注釋
注釋 :以 # 字符起始,直至實際的行尾。注釋可以從行首開始,也可以在空白或代碼之后,但是不出現(xiàn)在字符串中。
計算:+-*/% int() float()
編碼:
Latin-1 ,ASCII ,UTF-8 和 UTF-16 之類的編碼可以互相轉(zhuǎn)換(譯者:Latin-1 表示一個很小的拉丁語言符號集,與 ASCII 基本一致,其實不能用來表示龐大的東方語言字符集)。后兩個是變長編碼,將每一個 Unicode 字符存儲為一到多個字節(jié)。通常默認(rèn)編碼為 ASCII,此編碼接受 0 到 127 這個范圍的編碼,否則報錯。
轉(zhuǎn)移符:\
4 函數(shù)
函數(shù)定義:
[def]https://docs.python.org/2.7/reference/compound_stmts.html#def) 引入了一個函數(shù) 定義 。在其后必須跟有函數(shù)名和包括形式參數(shù)的圓括號。函數(shù)體語句從下一行開始,必須是縮進(jìn)的。
函數(shù)體的第一行語句可以是可選的字符串文本,這個字符串是函數(shù)的文檔字符串,或者稱為 docstring(文檔字符串)。
這一行應(yīng)該以大寫字母開頭,以句號結(jié)尾。
如果文檔字符串有多行,第二行應(yīng)該空出來,與接下來的詳細(xì)描述明確分隔。接下來的文檔應(yīng)該有一或多段描述對象的調(diào)用約定、邊界效應(yīng)等。
編碼風(fēng)格:
[PEP 8]引入了大多數(shù)項目遵循的風(fēng)格指導(dǎo)(https://www.python.org/dev/peps/pep-0008) ,主要著重點如下:
-
使用 4 空格縮進(jìn),而非 TAB。
在小縮進(jìn)(可以嵌套更深)和大縮進(jìn)(更易讀)之間,4 空格是一個很好的折中。TAB 引發(fā)了一些混亂,最好棄用。
-
折行以確保其不會超過 79 個字符。
這有助于小顯示器用戶閱讀,也可以讓大顯示器能并排顯示幾個代碼文件。
使用空行分隔函數(shù)和類,以及函數(shù)中的大塊代碼。
可能的話,注釋獨占一行
使用文檔字符串
把空格放到操作符兩邊,以及逗號后面,但是括號里側(cè)不加空格:
a = f(1, 2) + g(3, 4)。-
統(tǒng)一函數(shù)和類命名。
推薦類名用
駝峰命名,函數(shù)和方法名用小寫_和_下劃線??偸怯?self作為方法的第一個參數(shù)(關(guān)于類和方法的知識詳見 初識類)。 不要使用花哨的編碼,如果你的代碼的目的是要在國際化 環(huán)境。Python 的默認(rèn)情況下,UTF-8,甚至普通的 ASCII 總是工作的最好。
同樣,也不要使用非 ASCII 字符的標(biāo)識符,除非是不同語種的會閱讀或者維護(hù)代碼。
5 數(shù)據(jù)結(jié)構(gòu)
列表對象:
insert(n,x) 把元素x插入到指定的n+1位置
append(x) 把元素x追加到列表尾部
remove(x) 把鏈表中的第一個元素x刪除
reverse() 把鏈表倒置
sort() 把鏈表排序
pop() 把鏈表最后一個元素刪除
把鏈表當(dāng)堆棧使用
堆棧作為特定的數(shù)據(jù)結(jié)構(gòu),最先進(jìn)入的元素最后一個被釋放(后進(jìn)先出)。
append() 方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來。
把鏈表當(dāng)列隊使用
隊列作為特定的數(shù)據(jù)結(jié)構(gòu),最先進(jìn)入的元素最先釋放(先進(jìn)先出)。
函數(shù)編譯
內(nèi)置函數(shù)非常有用:
filter()
map()
reduce()
map() 函數(shù)的功能是對可迭代對象中的每個元素,都調(diào)用指定的函數(shù),并返回一個 map 對象。
注意,該函數(shù)返回的是一個 map 對象,不能直接輸出,可以通過 for 循環(huán)或者 list() 函數(shù)來顯示。
map() 函數(shù)的基本語法格式如下:
map(function, iterable)
其中,function 參數(shù)表示要傳入一個函數(shù),其可以是內(nèi)置函數(shù)、自定義函數(shù)或者 lambda 匿名函數(shù);iterable 表示一個或多個可迭代對象,可以是列表、字符串等。
還是對列表中的每個元素乘以 2。
listDemo = [1, 2, 3, 4, 5]
new_list = map(lambda x: x * 2, listDemo)
print(list(new_list))
運行結(jié)果為:
[2, 4, 6, 8, 10]
由于 map() 函數(shù)是直接由用 C 語言寫的,運行時不需要通過 Python 解釋器間接調(diào)用,并且內(nèi)部做了諸多優(yōu)化,所以相比其他方法,此方法的運行效率最高。
filter()函數(shù)的基本語法格式如下:
filter(function, iterable)
此格式中,funcition 參數(shù)表示要傳入一個函數(shù),iterable 表示一個可迭代對象。
filter() 函數(shù)的功能是對 iterable 中的每個元素,都使用 function 函數(shù)判斷,并返回 True 或者 False,最后將返回 True 的元素組成一個新的可遍歷的集合。
返回一個列表中的所有偶數(shù)。
listDemo = [1, 2, 3, 4, 5]
new_list = filter(lambda x: x % 2 == 0, listDemo)
print(list(new_list))
運行結(jié)果為:
[2, 4]
reduce() 函數(shù)通常用來對一個集合做一些累積操作,其基本語法格式為:
reduce(function, iterable)
其中,function 規(guī)定必須是一個包含 2 個參數(shù)的函數(shù);iterable 表示可迭代對象。
注意,由于 reduce() 函數(shù)在 Python 3.x 中已經(jīng)被移除,放入了 functools 模塊,因此在使用該函數(shù)之前,需先導(dǎo)入 functools 模塊。
計算某個列表元素的乘積。
import functools
listDemo = [1, 2, 3, 4, 5]
product = functools.reduce(lambda x, y: x * y, listDemo)
print(product)
運行結(jié)果為:
120
del也可以刪除整個變量。
循環(huán)技巧
在序列中循環(huán)時,索引位置和對應(yīng)值可以使用enumerate()函數(shù)同時得到。
同時循環(huán)兩個或更多的序列,可以使用zip()整體打包。
需要逆向循環(huán)序列的話,先正向定位序列,然后調(diào)用reversed()函數(shù)。
要按排序后的順序循環(huán)序列的話,使用 sorted()函數(shù),它不改動原序列,而是生成一個新的已排序的序列。
遍歷字典時,使用iteritems()方法可以同時得到鍵和對應(yīng)的值。
若要在循環(huán)內(nèi)部修改正在遍歷的序列(例如復(fù)制某些元素),建議您首先制作副本。在序列上循環(huán)不會隱式地創(chuàng)建副本。切片表示法使這尤其方便。
6 模塊
import導(dǎo)入模塊中的所有函數(shù)
如果打算頻繁使用一個函數(shù),你可以將它賦予一個本地變量。
一個好的習(xí)慣是將所有的import語句放在模塊的開始(或者是腳本),這并非強(qiáng)制。
from fibo import *
可以導(dǎo)入所有除了以下劃線( _ )開頭的命名。需要注意的是在實踐中往往不鼓勵從一個模塊或包中使用 * 導(dǎo)入所有,因為這樣會讓代碼變得很難讀。
解釋器由 sys.path 變量指定的路徑目錄搜索模塊,該變量初始化時默認(rèn)包含了輸入腳本(或者當(dāng)前目錄),PYTHONPATH 和安裝目錄。這樣就允許 Python 程序了解如何修改或替換模塊搜索目錄。需要注意的是由于這些目錄中包含有搜索路徑中運行的腳本,所以這些腳本不應(yīng)該和標(biāo)準(zhǔn)模塊重名,否則在導(dǎo)入模塊時 Python 會嘗試把這些腳本當(dāng)作模塊來加載。
sapm.pyc被視為模塊spam的預(yù)編譯二進(jìn)制文件,用于修改時間記錄,一旦spam.py成功編譯,就會產(chǎn)生對應(yīng)版本的spam.pyc。
如果沒有設(shè)定 PYTHONPATH ,就由內(nèi)置的默認(rèn)值初始化。你可以用標(biāo)準(zhǔn)的列表操作修改它:
import sys
sys.path.append('/ufs/guido/lib/python')
內(nèi)置函數(shù)dir用于按模塊名搜索模塊定義,它返回一個排好序的字符串類型的存儲列表:
dir()不會列出內(nèi)置函數(shù)和變量名。如果你想列出這些內(nèi)容,它們在標(biāo)準(zhǔn)模塊 builtin 中定義:
包
包通常是使用用“圓點模塊名”的結(jié)構(gòu)化模塊命名空間。例如,名為 A.B 的模塊表示了名為 A 的包中名為 B 的子模塊。
7.輸入和輸出
輸出:
print
str() str.zfill()左側(cè)填充;str.format()填充
repr()
write()
輸入:
open()返回文件對象
read()
readline()
seek()
8.錯誤和異常
Python 中(至少)有兩種錯誤:語法錯誤和異常( syntax errors 和 exceptions )。
8.1 語法錯誤
小箭頭的位置標(biāo)記錯誤出現(xiàn)的位置;
8.2 異常
try 。。。except。。。 中間可以添加else。。。
raise語句拋出指定異常。
不管有沒有發(fā)生異常,finally子句 在程序離開 try后都一定會被執(zhí)行。
9 類
class
繼承,迭代,生成
10 標(biāo)準(zhǔn)庫
- os 模塊提供很多與操作系統(tǒng)交互的函數(shù);內(nèi)置dir()和help()函數(shù);針對日常的文件和目錄管理任務(wù),shutil模塊提供了一個易于使用的高級接口:
2)glob模塊提供了一個函數(shù)用于從目錄通配符搜素中生成列表:
3-4)sys模塊
5)re模塊未高級字符串處理提供了正則表達(dá)式工具。
6)math模塊位浮點運算提供了對底層C函數(shù)庫的訪問;random提供了生成隨機(jī)數(shù)的工具;
7)urllib模塊用于處理urls接受的數(shù)據(jù);smtplib用于發(fā)送電子郵件;
8)datetime模塊為日期和時間處理提供方法;
9)以下模塊支持通用的數(shù)據(jù)打包和壓縮格式:zlib/gzip/bz2/zipflie/tarfile;
10)timeit時間量度工具。
11)doctest模塊提供掃描模塊并根據(jù)程序中內(nèi)嵌的文檔字符串執(zhí)行測試,測試構(gòu)造如同簡單的將它的輸出結(jié)果剪切并粘貼到文檔字符串中。
unittest模塊可以在一個獨立的文件里提供一個更加全面的測試集。
12)csv模塊支持通用數(shù)據(jù)庫格式中直接讀寫。
13)repr模塊為大型或深度嵌套的容器縮寫顯示提供了repr()函數(shù)。
14)pprint模塊提供了一種解釋器可讀的方式深入控制內(nèi)置和用戶自定義對象的打印。當(dāng)輸出超過一行的時候,“美化打印(pretty printer)”添加斷行和標(biāo)識符,使得數(shù)據(jù)結(jié)構(gòu)顯示的更清晰。
15)textwrap模塊格式化文本段落以適應(yīng)設(shè)定的屏寬。
16)locale模塊按訪問設(shè)定好的國家信息數(shù)據(jù)庫。
17)string模塊提供了一個模塊類Template,使用它最終用戶可以簡單地進(jìn)行編輯。
18)struct模塊為使用變長的二進(jìn)制記錄格式提供了pack()和unpack()函數(shù)。
19)logging模塊提供了完整靈活的日志系統(tǒng)。它最簡單的用法就是記錄信息并發(fā)送信息到一個文件或sys.stderr。
20 )Python 自動進(jìn)行內(nèi)存管理(對大多數(shù)的對象進(jìn)行引用計數(shù)和垃圾回收 garbage collection 以循環(huán)利用)在最后一個引用消失后,內(nèi)存會很快釋放。weakref 模塊提供了不用創(chuàng)建引用的跟蹤對象工具,一旦對象不再存在,它自動從弱引用表上刪除并觸發(fā)回調(diào)。
21 )array模塊提供了一個類似列表的 array()對象,它僅僅是存儲數(shù)據(jù),更為緊湊。
22)collections 模塊提供了類似列表的 deque()對象,它從左邊添加(append)和彈出(pop)更快,但是在內(nèi)部查詢更慢。
22)bisect模塊以操作存儲鏈表。
23)heapq提供了基于正規(guī)鏈表的堆實現(xiàn)。最小的值總是保持在 0 點。
24)decimal 模塊提供了一個Decimal數(shù)據(jù)類型用于浮點數(shù)計算,相比較內(nèi)置的二進(jìn)制浮點數(shù)實現(xiàn)float,這個類型有助于:
- 金融應(yīng)用和其它需要精確十進(jìn)制表達(dá)的場合,
- 控制精度,
- 控制舍入以適應(yīng)法律或者規(guī)定要求,
- 確保十進(jìn)制數(shù)位精度,
或者 - 用戶希望計算結(jié)果與手算相符的場合。
11. python文檔輔助文檔
python入門指南:。python入門指南
python標(biāo)準(zhǔn)庫:(針對讀取 Unix 郵箱、接收 HTTP 文檔、生成隨機(jī)數(shù)、解析命令行選項、寫 CGI 程序、壓縮數(shù)據(jù)以及很多其它任務(wù)的模塊)。Python 標(biāo)準(zhǔn)庫
python模塊安裝:展示了如何安裝其他 Python 用戶編寫的附加模塊。安裝 Python 模塊
python語言參考:詳細(xì)說明了python語法和語義。讀起來有點累,不過對于語言本身,有份完整的手冊和有用。
其它 Python 資源:
http://www.python.org: Python 官方網(wǎng)站。它包含代碼、文檔和 Web 上與 Python 有關(guān)的頁面鏈接。
該網(wǎng)站鏡像于世界各地,類似歐洲、日本和澳大利亞。鏡像可能會比主站快,這取決于你的地理位置。http://docs.python.org: 快速訪問 Python 的文檔。
-
http://pypi.python.org: Python 包索引,以前昵稱為奶酪店,索引了可供下載的,用戶創(chuàng)建的 Python 模塊。
如果你發(fā)布了代碼,可以注冊到這里,這樣別人可以找到它。
-
http://aspn.activestate.com/ASPN/Python/Cookbook/: Python 食譜是大量的示例代碼、大型的集合,和有用的腳本。
值得關(guān)注的是這次資源已經(jīng)結(jié)集成書,名為《Python 食譜》(O’Reilly & Associates, ISBN 0-596-00797-3)
12. 交互式輸入行編輯
行編輯:
C-A (Control-A)將光標(biāo)移動到行首,
C-E 移動到行尾,
C-B 向左移一個字符,
C-F 向右移一位。
Backspace退格向左刪除一個符串,
C-D 向右刪除一個字符。
C-K 刪掉光標(biāo)右邊直到行尾的所有字符,
C-Y 將最后一次刪除的字符串粘貼到光標(biāo)位置。
C-underscore (underscores 即下劃線,譯注)撤銷最后一次修改,它可以因積累作用重復(fù)。
歷史回溯:
C-P 在歷史緩存中上溯一行,
C-N 向下移一行。
Return 鍵時將當(dāng)前行傳入解釋器。
C-R 開始一個增量向前搜索;
C-S 開始一個向后搜索。
快捷鍵綁定:
Readline 庫的快捷鍵綁定和其它一些參數(shù)可以通過名為 ~/.inputrc 的初始化文件的替換命名來定制。
中斷
Control-C 或者 DEL
13. 浮點數(shù)
13.1 浮點數(shù)計算
浮點數(shù)在計算機(jī)中表達(dá)為二進(jìn)制(binary)小數(shù)。
在運算過程中會產(chǎn)生奇怪的現(xiàn)象,如,
對 10 個 0.1 的值求和不能精確的得到 1.0:
>>> sum = 0.0
>>> for i in range(10):
... sum += 0.1
...
>>> sum
0.9999999999999999
不能精確表達(dá)結(jié)果:
>>> 0.1 + 0.2
0.30000000000000004
這些問題是一直存在的,在運行中出現(xiàn)并不能說明代碼錯誤,而是有可能存在系統(tǒng)偏差。
13.2 二進(jìn)制與十進(jìn)制
十進(jìn)制轉(zhuǎn)二進(jìn)制
整數(shù)取二進(jìn)制(采用"除2取余,逆序排列"法)
具體做法:
1.首先用2整除一個十進(jìn)制整數(shù),得到一個商和余數(shù)
2.然后再用2去除得到的商,又會得到一個商和余數(shù)
3.重復(fù)操作,一直到商為小于1時為止
4.然后將得到的所有余數(shù)全部排列起來,再將它反過來(逆序排列),切記一定要反過來!
如: 42轉(zhuǎn)為二進(jìn)制后為101010(結(jié)果取反)
42/2=21.......0
21/2=10.......1
10/2=5......0
5/2=2......1
2/2=1......0
1/2=0......1
十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù)采用"乘2取整,順序排列"法。
具體做法如下:
用2乘十進(jìn)制小數(shù),可以得到積,將積的整數(shù)部分取出,再用2乘余下的小數(shù)部分,又得到一個積,再將積的整數(shù)部分取出,如此進(jìn)行,直到積中的整數(shù)部分為零,或者整數(shù)部分為1,此時0或1為二進(jìn)制的最后一位?;蛘哌_(dá)到所要求的精度為止。
然后把取出的整數(shù)部分按順序排列起來,先取的整數(shù)作為二進(jìn)制小數(shù)的高位有效位,后取的整數(shù)作為低位有效位。
如:0.625=(0.101)B
0.6252=1.25======取出整數(shù)部分1
0.252=0.5========取出整數(shù)部分0
0.5*2=1==========取出整數(shù)部分1再如:0.7=(0.1 0110 0110...)B
0.72=1.4========取出整數(shù)部分1
0.42=0.8========取出整數(shù)部分0
0.82=1.6========取出整數(shù)部分1
0.62=1.2========取出整數(shù)部分1
0.22=0.4========取出整數(shù)部分0
0.42=0.8========取出整數(shù)部分0
0.82=1.6========取出整數(shù)部分1
0.62=1.2========取出整數(shù)部分1
0.2*2=0.4========取出整數(shù)部分0
二進(jìn)制轉(zhuǎn)換為十進(jìn)制
二進(jìn)制轉(zhuǎn)為十進(jìn)制要從右到左用二進(jìn)制的每個數(shù)去乘以2的相應(yīng)次方,小數(shù)點后則是從左往右。
如果首位是0就表示正整數(shù),如果首位是1則表示負(fù)整數(shù),正整數(shù)可以直接換算,負(fù)整數(shù)則需要先取反再換算。
因為計算機(jī)內(nèi)部表示數(shù)的字節(jié)單位是定長的。如8位、16位、32位。所以位數(shù)不夠時,高位補(bǔ)零。
如要想二進(jìn)制00101010轉(zhuǎn)為十進(jìn)制,因為以0開頭,所以這是正整數(shù),計算如下所示:
(0 * 2的零次方) + (1* 2的一次方)+ (0 * 2 的二次方)+(1 * 2的三次方) +(0 * 2的四次方) +(1* 2的五次方) + (0 * 2的六次方) + (0 * 2的7次方) = 0 + 2 + 0 + 8 + 0 + 32 + 0 + 0 = 42
14.其他
14.1 處理錯誤
有錯誤發(fā)生時,解釋器會打印一個錯誤信息和棧跟蹤器。
在交互模式下,它返回主提示符,如果從文件輸入執(zhí)行,它在打印棧跟蹤器后以非零狀態(tài)退出。
14.2 執(zhí)行python腳本
在Unix 系統(tǒng)中,Python 腳本可以像 Shell 腳本那樣直接執(zhí)行。只要在腳本文件開頭寫一行命令,指定文件和模式:
#! /usr/bin/env python
首先要確認(rèn) Python 解釋器在用戶的 PATH 中。 #! 必須是文件的前兩個字符,在某些平臺上,第一行必須以 Unix 風(fēng)格的行結(jié)束符 ('\n')結(jié)束,不能用 Windows ('\r\n') 的結(jié)束符。注意,'#' 是 Python 中是行注釋的起始符。
腳本可以通過 chmod 命令指定執(zhí)行模式和權(quán)限:
$ chmod +x myscript.py
Windows 系統(tǒng)上沒有“執(zhí)行模式”。Python 安裝程序自動將 .py 文件關(guān)聯(lián)到 python.exe ,所以在 Python 文件圖標(biāo)上雙擊,它就會作為腳本執(zhí)行。同樣 .pyw 也做了這樣的關(guān)聯(lián),通常它執(zhí)行時不會顯示控制臺窗口。
14.3 交互執(zhí)行文件
使用 Python 解釋器的時候,我們可能需要在每次解釋器啟動時執(zhí)行一些命令。你可以在一個文件中包含你想要執(zhí)行的命令,設(shè)定一個名為 PYTHONSTARTUP 的環(huán)境變量來指定這個文件。這類似于 Unix shell 的 .profile 文件。
這個文件在交互會話期是只讀的,當(dāng) Python 從腳本中解讀文件或以終端 /dev/tty 做為外部命令源時則不會如此 (盡管它們的行為很像是處在交互會話期) 它與解釋器執(zhí)行的命令處在同一個命名空間,所以由它定義或引用的一切可以在解釋器中不受限制地使用。你也可以在這個文件中改變 sys.ps1 和 sys.ps2 指令。
如果你想要在當(dāng)前目錄中執(zhí)行附加的啟動文件,可以在全局啟動文件中加入類似以下的代碼:if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')。如果你想要在某個腳本中使用啟動文件,必須要在腳本中寫入這樣的語句:
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
with open(filename) as fobj:
startup_file = fobj.read()
exec(startup_file)</pre>
14.4 定制模塊
Python 提供了兩個鉤子 (方法) 來本地化: sitecustomize 和 usercustomize。為了見識它們,你首先需要找到你的 site-packages 的目錄。啟動 python 執(zhí)行下面的代碼:
>>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python2.7/site-packages'
現(xiàn)在你可以在 site-packages 的目錄下創(chuàng)建 usercustomize.py 文件,這個文件將會影響 python 的每次調(diào)用,除非啟動的時候加入 -s選項禁止自動導(dǎo)入。
sitecustomize 的工作方式一樣,但是是由電腦的管理賬戶創(chuàng)建以及在 usercustomize 之前導(dǎo)入。
-------------------------------------------------------------------------------------------------------------------------------------------------------------I'm a line ! Thanks for your attention !----------------------------------------------------------------------------------------------------------------