一、Python數(shù)據(jù)類型轉(zhuǎn)換
| 函數(shù) | 描述 |
|---|---|
| int(x [,base]) | 將x轉(zhuǎn)換為一個(gè)整數(shù) |
| long(x [,base] ) | 將x轉(zhuǎn)換為一個(gè)長(zhǎng)整數(shù) |
| float(x) | 將x轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù) |
| complex(real [,imag]) | 創(chuàng)建一個(gè)復(fù)數(shù) |
| str(x) | 將對(duì)象 x 轉(zhuǎn)換為字符串 |
| repr(x) | 將對(duì)象 x 轉(zhuǎn)換為表達(dá)式字符串 |
| eval(str) | 用來計(jì)算在字符串中的有效Python表達(dá)式,并返回一個(gè)對(duì)象 |
| tuple(s) | 將序列 s 轉(zhuǎn)換為一個(gè)元組 |
| list(s) | 將序列 s 轉(zhuǎn)換為一個(gè)列表 |
| set(s) | 轉(zhuǎn)換為可變集合 |
| dict(d) | 創(chuàng)建一個(gè)字典。d 必須是一個(gè)序列 (key,value)元組。 |
| frozenset(s) | 轉(zhuǎn)換為不可變集合 |
| chr(x) | 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)字符 |
| unichr(x) | 將一個(gè)整數(shù)轉(zhuǎn)換為Unicode字符 |
| ord(x) | 將一個(gè)字符轉(zhuǎn)換為它的整數(shù)值 |
| hex(x) | 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)十六進(jìn)制字符串 |
| oct(x) | 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)八進(jìn)制字符串 |
二、Python隨機(jī)數(shù)函數(shù)
需要導(dǎo)入 random
import random
| 函數(shù) | 描述 |
|---|---|
| choice(seq) | 從序列的元素中隨機(jī)挑選一個(gè)元素,比如random.choice(range(10)),從0到9中隨機(jī)挑選一個(gè)整數(shù)。 |
| randrange ([start,] stop [,step]) | 從指定范圍內(nèi),按指定基數(shù)遞增的集合中獲取一個(gè)隨機(jī)數(shù),基數(shù)默認(rèn)值為 1 |
| random() | 隨機(jī)生成下一個(gè)實(shí)數(shù),它在[0,1)范圍內(nèi)。 |
| seed([x]) | 改變隨機(jī)數(shù)生成器的種子seed。如果你不了解其原理,你不必特別去設(shè)定seed,Python會(huì)幫你選擇seed。 |
| shuffle(lst) | 將序列的所有元素隨機(jī)排序 |
| uniform(x, y) | 隨機(jī)生成下一個(gè)實(shí)數(shù),它在[x,y]范圍內(nèi)。 |
三、Python轉(zhuǎn)義字符
| 轉(zhuǎn)義字符 | 描述 |
|---|---|
\ (在行尾時(shí)) |
續(xù)行符 |
\\ |
反斜杠符號(hào) |
\' |
單引號(hào) |
\" |
雙引號(hào) |
\a |
響鈴 |
\b |
退格(Backspace) |
\e |
轉(zhuǎn)義 |
\000 |
空 |
\n |
換行 |
\v |
縱向制表符 |
\t |
橫向制表符 |
\r |
回車 |
\f |
換頁 |
\oyy |
八進(jìn)制數(shù),yy 代表的字符,例如:\o12 代表換行 |
\xyy |
十六進(jìn)制數(shù),yy 代表的字符,例如:\x0a 代表換行 |
\other |
其它的字符以普通格式輸出 |
四、數(shù)組
4.1 Python列表腳本操作符
| Python 表達(dá)式 | 結(jié)果 | 描述 |
|---|---|---|
| len([1, 2, 3]) | 3 | 長(zhǎng)度 |
| [1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 組合 |
| ['Hi!'] * 4 | ['Hi!', 'Hi!', 'Hi!', 'Hi!'] | 重復(fù) |
| 3 in [1, 2, 3] | True | 元素是否存在于列表中 |
| for x in [1, 2, 3]: print x, | 1 2 3 | 迭代 |
4.2 Python列表截取
| Python 表達(dá)式 | 結(jié)果 | 描述 |
|---|---|---|
| L[2] | 'Taobao' | 讀取列表中第三個(gè)元素 |
| L[-2] | 'Runoob' | 讀取列表中倒數(shù)第二個(gè)元素 |
| L[1:] | ['Runoob', 'Taobao'] | 從第二個(gè)元素開始截取列表 |
4.3 Python列表函數(shù)&方法
| 序號(hào) | 函數(shù) |
|---|---|
| 1 | cmp(list1, list2) 比較兩個(gè)列表的元素 |
| 2 | len(list) 列表元素個(gè)數(shù) |
| 3 | max(list) 返回列表元素最大值 |
| 4 | min(list) 返回列表元素最小值 |
| 5 | list(seq) 將元組轉(zhuǎn)換為列表 |
| 序號(hào) | 方法 |
|---|---|
| 1 | list.append(obj) 在列表末尾添加新的對(duì)象 |
| 2 | list.count(obj) 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù) |
| 3 | list.extend(seq) 在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來的列表) |
| 4 | list.index(obj) 從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置 |
| 5 | list.insert(index, obj) 將對(duì)象插入列表 |
| 6 | list.pop([index=-1]) 移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值 |
| 7 | list.remove(obj) 移除列表中某個(gè)值的第一個(gè)匹配項(xiàng) |
| 8 | list.reverse() 反向列表中元素 |
| 9 | list.sort(cmp=None, key=None, reverse=False) 對(duì)原列表進(jìn)行排序 |
五、字典
| 序號(hào) | 函數(shù)及描述 |
|---|---|
| 1 | dict.clear() 刪除字典內(nèi)所有元素 |
| 2 | dict.copy() 返回一個(gè)字典的淺復(fù)制 |
| 3 | dict.fromkeys(seq[, val]) 創(chuàng)建一個(gè)新字典,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對(duì)應(yīng)的初始值 |
| 4 | dict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值 |
| 5 | dict.has_key(key) 如果鍵在字典dict里返回true,否則返回false |
| 6 | dict.items() 以列表返回可遍歷的(鍵, 值) 元組數(shù)組 |
| 7 | dict.keys() 以列表返回一個(gè)字典所有的鍵 |
| 8 | dict.setdefault(key, default=None) 和get()類似, 但如果鍵不存在于字典中,將會(huì)添加鍵并將值設(shè)為default |
| 9 | dict.update(dict2) 把字典dict2的鍵/值對(duì)更新到dict里 |
| 10 | dict.values() 以列表返回字典中的所有值 |
| 11 | pop(key[,default]) 刪除字典給定鍵 key 所對(duì)應(yīng)的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。 |
| 12 | popitem() 返回并刪除字典中的最后一對(duì)鍵和值。 |
六、日期和時(shí)間
import time
import calendar
6.1 time 模塊
- 獲取當(dāng)前時(shí)間
ticks = time.time()
當(dāng)前時(shí)間戳: 1599991315.920578
- 本地時(shí)間
localtime = time.localtime(time.time())
本地時(shí)間: time.struct_time(tm_year=2020, tm_mon=9, tm_mday=13, tm_hour=18, tm_min=1, tm_sec=55, tm_wday=6, tm_yday=257, tm_isdst=0)
- 獲取格式化的時(shí)間
localtime = time.asctime( time.localtime(time.time()) )
格式化時(shí)間: Sun Sep 13 18:04:21 2020
- 格式化日期
| 符號(hào) | 描述 |
|---|---|
| %y | 兩位數(shù)的年份表示(00-99) |
| %Y | 四位數(shù)的年份表示(000-9999) |
| %m | 月份(01-12) |
| %d | 月內(nèi)中的一天(0-31) |
| %H | 24小時(shí)制小時(shí)數(shù)(0-23) |
| %I | 12小時(shí)制小時(shí)數(shù)(01-12) |
| %M | 分鐘數(shù)(00-59) |
| %S | 秒(00-59) |
| %a | 本地簡(jiǎn)化星期名稱 |
| %A | 本地完整星期名稱 |
| %b | 本地簡(jiǎn)化的月份名稱 |
| %B | 本地完整的月份名稱 |
| %c | 本地相應(yīng)的日期表示和時(shí)間表示 |
| %j | 年內(nèi)的一天(001-366) |
| %p | 本地A.M.或P.M.的等價(jià)符 |
| %U | 一年中的星期數(shù)(00-53)星期天為星期的開始 |
| %w | 星期(0-6),星期天為星期的開始 |
| %W | 一年中的星期數(shù)(00-53)星期一為星期的開始 |
| %x | 本地相應(yīng)的日期表示 |
| %X | 本地相應(yīng)的時(shí)間表示 |
| %Z | 當(dāng)前時(shí)區(qū)的名稱 |
| %% | %號(hào)本身 |
五、函數(shù)
可更改(mutable)與不可更改(immutable)對(duì)象
在 python 中,strings, tuples, 和 numbers 是不可更改的對(duì)象,而 list, dict 等則是可以修改的對(duì)象。
不可變類型:變量賦值
a=5后再賦值a=10,這里實(shí)際是新生成一個(gè)int值對(duì)象10,再讓a指向它,而5被丟棄,不是改變a的值,相當(dāng)于新生成了a。可變類型:變量賦值
la=[1,2,3,4]后再賦值la[2]=5則是將list la的第三個(gè)元素值更改,本身la沒有動(dòng),只是其內(nèi)部的一部分值被修改了。
python 函數(shù)的參數(shù)傳遞:
不可變類型:類似
c++的值傳遞,如 整數(shù)、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對(duì)象本身。比如在fun(a)內(nèi)部修改a的值,只是修改另一個(gè)復(fù)制的對(duì)象,不會(huì)影響a本身。可變類型:類似
c++的引用傳遞,如 列表,字典。如fun(la),則是將la真正的傳過去,修改后fun外部的la也會(huì)受影響
python 中一切都是對(duì)象,嚴(yán)格意義我們不能說值傳遞還是引用傳遞,我們應(yīng)該說傳不可變對(duì)象和傳可變對(duì)象。
六、模塊
support.py 文件
supDic = {
"name": "loongod",
"age": 31,
"weight": 120
}
def printPersonName(person):
print("this person's name ", person)
return
6.1 import
當(dāng)解釋器遇到 import 語句,如果模塊在當(dāng)前的搜索路徑就會(huì)被導(dǎo)入。
搜索路徑是一個(gè)解釋器會(huì)先進(jìn)行搜索的所有目錄的列表。如想要導(dǎo)入模塊 support.py,需要把命令放在腳本的頂端:
# 導(dǎo)入模塊
import support
# 現(xiàn)在可以調(diào)用模塊里包含的函數(shù)了
support.printPersonName("Runoob")
一個(gè)模塊只會(huì)被導(dǎo)入一次,不管你執(zhí)行了多少次 import。這樣可以防止導(dǎo)入模塊被一遍又一遍地執(zhí)行。
6.2 from…import 語句
Python 的 from 語句讓你從模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中。語法如下:
from modname import name1[, name2[, ... nameN]]
例如,要導(dǎo)入模塊 support 的 printPersonName 函數(shù),使用如下語句:
from support import printPersonName
// 調(diào)用如下
printPersonName('loongod')
這個(gè)聲明不會(huì)把整個(gè) support 模塊導(dǎo)入到當(dāng)前的命名空間中,它只會(huì)將 support 里的 printPersonName 單個(gè)引入到執(zhí)行這個(gè)聲明的模塊的全局符號(hào)表。
6.3 from…import* 語句
把一個(gè)模塊的 所有內(nèi)容全都導(dǎo)入 到當(dāng)前的命名空間也是可行的,只需使用如下聲明:
from modname import *
這提供了一個(gè)簡(jiǎn)單的方法來導(dǎo)入一個(gè)模塊中的所有項(xiàng)目。然而這種聲明不該被過多地使用。
例如我們想一次性引入 math 模塊中所有的東西,語句如下:
from math import *
6.4 搜索路徑
當(dāng)你導(dǎo)入一個(gè)模塊,Python 解析器對(duì)模塊位置的搜索順序是:
- 當(dāng)前目錄
- 如果不在當(dāng)前目錄,
Python則搜索在shell變量PYTHONPATH下的每個(gè)目錄。 - 如果都找不到,
Python會(huì)察看默認(rèn)路徑。UNIX下,默認(rèn)路徑一般 為/usr/local/lib/python/。
模塊搜索路徑存儲(chǔ)在 system 模塊的 sys.path 變量中。變量里包含當(dāng)前目錄,PYTHONPATH和由安裝過程決定的默認(rèn)目錄。
七、文件 I/O
-
input([prompt]):標(biāo)準(zhǔn)輸入讀入一行文本,默認(rèn)的標(biāo)準(zhǔn)輸入是鍵盤
7.1 打開和關(guān)閉文件
** open 函數(shù) **
你必須先用Python內(nèi)置的open()函數(shù)打開一個(gè)文件,創(chuàng)建一個(gè)file對(duì)象,相關(guān)的方法才可以調(diào)用它進(jìn)行讀寫。
語法:file object = open(file_name [, access_mode][, buffering])
各個(gè)參數(shù)的細(xì)節(jié)如下:
-
file_name:file_name變量是一個(gè)包含了你要訪問的文件名稱的字符串值。 -
access_mode:access_mode決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個(gè)參數(shù)是非強(qiáng)制的,默認(rèn)文件訪問模式為只讀(r)。 -
buffering: 如果buffering的值被設(shè)為0,就不會(huì)有寄存。如果buffering的值取1,訪問文件時(shí)會(huì)寄存行。如果將buffering的值設(shè)為大于1的整數(shù),表明了這就是的寄存區(qū)的緩沖大小。如果取負(fù)值,寄存區(qū)的緩沖大小則為系統(tǒng)默認(rèn)。
| 模式 | 描述 |
|---|---|
| t | 文本模式 (默認(rèn))。 |
| x | 寫模式,新建一個(gè)文件,如果該文件已存在則會(huì)報(bào)錯(cuò)。 |
| b | 二進(jìn)制模式。 |
| + | 打開一個(gè)文件進(jìn)行更新(可讀可寫)。 |
| U | 通用換行模式(不推薦)。 |
| r | 以只讀方式打開文件。文件的指針將會(huì)放在文件的開頭。這是默認(rèn)模式。 |
| rb | 以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開頭。這是默認(rèn)模式。一般用于非文本文件如圖片等。 |
| r+ | 打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。 |
| rb+ | 以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。一般用于非文本文件如圖片等。 |
| w | 打開一個(gè)文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb | 以二進(jìn)制格式打開一個(gè)文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。 |
| w+ | 打開一個(gè)文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb+ | 以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。 |
| a | 打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。 |
| ab | 以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。 |
| a+ | 打開一個(gè)文件用于讀寫。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫。 |
| ab+ | 以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫。 |
下圖很好的總結(jié)了這幾種模式:

| 模式 | r | r+ | w | w+ | a | a+ |
|---|---|---|---|---|---|---|
| 讀 | + | + | + | + | ||
| 寫 | + | + | + | + | + | |
| 創(chuàng)建 | + | + | + | + | ||
| 覆蓋 | + | + | ||||
| 指針在開始 | + | + | + | + | ||
| 指針在結(jié)尾 | + | + |
read() 方法從一個(gè)打開的文件中讀取一個(gè)字符串。需要重點(diǎn)注意的是,Python字符串可以是二進(jìn)制數(shù)據(jù),而不是僅僅是文字。
fileObject.read([count])
在這里,被傳遞的參數(shù)是要從已打開文件中讀取的字節(jié)計(jì)數(shù)。該方法從文件的開頭開始讀入,如果沒有傳入count,它會(huì)嘗試盡可能多地讀取更多的內(nèi)容,很可能是直到文件的末尾。
close() 方法:
當(dāng)一個(gè)文件對(duì)象的引用被重新指定給另一個(gè)文件時(shí),Python 會(huì)關(guān)閉之前的文件。用 close()方法關(guān)閉文件是一個(gè)很好的習(xí)慣。
tell() 方法告訴你文件內(nèi)的當(dāng)前位置, 換句話說,下一次的讀寫會(huì)發(fā)生在文件開頭這么多字節(jié)之后。
seek(offset [,from]) 方法改變當(dāng)前文件的位置。Offset變量表示要移動(dòng)的字節(jié)數(shù)。From變量指定開始移動(dòng)字節(jié)的參考位置。
如果from被設(shè)為0,這意味著將文件的開頭作為移動(dòng)字節(jié)的參考位置。如果設(shè)為1,則使用當(dāng)前的位置作為參考位置。如果它被設(shè)為2,那么該文件的末尾將作為參考位置。
# 打開一個(gè)文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "讀取的字符串是 : ", str
# 查找當(dāng)前位置
position = fo.tell()
print "當(dāng)前文件位置 : ", position
# 把指針再次重新定位到文件開頭
position = fo.seek(0, 0)
str = fo.read(10)
print "重新讀取字符串 : ", str
# 關(guān)閉打開的文件
fo.close()
7.2 File 對(duì)象的屬性
一個(gè)文件被打開后,你有一個(gè)file對(duì)象,你可以得到有關(guān)該文件的各種信息。
以下是和file對(duì)象相關(guān)的所有屬性的列表:
| 屬性 | 描述 |
|---|---|
| file.closed | 返回true如果文件已被關(guān)閉,否則返回false。 |
| file.mode | 返回被打開文件的訪問模式。 |
| file.name | 返回文件的名稱。 |
| file.softspace | 如果用print輸出后,必須跟一個(gè)空格符,則返回false。否則返回true。 |
file 方法
| 序號(hào) | 方法及描述 |
|---|---|
| 1 | file.close()關(guān)閉文件。關(guān)閉后文件不能再進(jìn)行讀寫操作。 |
| 2 | file.flush()刷新文件內(nèi)部緩沖,直接把內(nèi)部緩沖區(qū)的數(shù)據(jù)立刻寫入文件, 而不是被動(dòng)的等待輸出緩沖區(qū)寫入。 |
| 3 | file.fileno()返回一個(gè)整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上。 |
| 4 | file.isatty()如果文件連接到一個(gè)終端設(shè)備返回 True,否則返回 False。 |
| 5 | file.next()返回文件下一行。 |
| 6 | file.read([size])從文件讀取指定的字節(jié)數(shù),如果未給定或?yàn)樨?fù)則讀取所有。 |
| 7 | file.readline([size])讀取整行,包括 "\n" 字符。 |
| 8 | file.readlines([sizeint])讀取所有行并返回列表,若給定sizeint>0,則是設(shè)置一次讀多少字節(jié),這是為了減輕讀取壓力。 |
| 9 | file.seek(offset[, whence])設(shè)置文件當(dāng)前位置 |
| 10 | file.tell()返回文件當(dāng)前位置。 |
| 11 | file.truncate([size])截取文件,截取的字節(jié)通過size指定,默認(rèn)為當(dāng)前文件位置。 |
| 12 | file.write(str)將字符串寫入文件,返回的是寫入的字符長(zhǎng)度。 |
| 13 | file.writelines(sequence)向文件寫入一個(gè)序列字符串列表,如果需要換行則要自己加入每行的換行符。 |
7.3 重命名和刪除文件
Python的os模塊提供了幫你執(zhí)行文件處理操作的方法,比如重命名和刪除文件。
要使用這個(gè)模塊,你必須先導(dǎo)入它,然后才可以調(diào)用相關(guān)的各種功能。
rename()方法:
rename()方法需要兩個(gè)參數(shù),當(dāng)前的文件名和新文件名。
語法:os.rename(current_file_name, new_file_name)
import os
# 重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )
remove()方法, 你可以用remove()方法刪除文件,需要提供要?jiǎng)h除的文件名作為參數(shù)。
語法:os.remove(file_name)
import os
# 刪除一個(gè)已經(jīng)存在的文件test2.txt
os.remove("test2.txt")
7.4 Python里的目錄
所有文件都包含在各個(gè)不同的目錄下,不過Python也能輕松處理。os模塊有許多方法能幫你創(chuàng)建,刪除和更改目錄。
| 函數(shù) | 語法 | 解釋 |
|---|---|---|
mkdir() |
os.mkdir("newdir") |
可以使用 os 模塊的 mkdir() 方法在當(dāng)前目錄下創(chuàng)建新的目錄們。你需要提供一個(gè)包含了要?jiǎng)?chuàng)建的目錄名稱的參數(shù)。 |
chdir() |
os.chdir("newdir") |
可以用 chdir() 方法來改變當(dāng)前的工作目錄。像當(dāng)與cd到newdir的目錄里面了,chdir() 方法需要的一個(gè)參數(shù)是你想設(shè)成當(dāng)前目錄的目錄名稱。 |
getcwd() |
os.getcwd() |
顯示當(dāng)前的工作目錄 |
rmdir() |
os.rmdir('dirname') |
刪除目錄,目錄名稱以參數(shù)傳遞。在刪除這個(gè)目錄之前,它的所有內(nèi)容應(yīng)該先被清除。 |
八、類
類的專有方法:
-
__init__: 構(gòu)造函數(shù),在生成對(duì)象時(shí)調(diào)用 -
__del__: 析構(gòu)函數(shù),釋放對(duì)象時(shí)使用 -
__repr__: 打印,轉(zhuǎn)換 -
__setitem__: 按照索引賦值 -
__getitem__: 按照索引獲取值 -
__len__: 獲得長(zhǎng)度 -
__cmp__: 比較運(yùn)算 -
__call__: 函數(shù)調(diào)用 -
__add__: 加運(yùn)算 -
__sub__: 減運(yùn)算 -
__mul__: 乘運(yùn)算 -
__truediv__: 除運(yùn)算 -
__mod__: 求余運(yùn)算 -
__pow__: 乘方
九、Python3 標(biāo)準(zhǔn)庫概覽
9.1 os 模塊
>>> import os
>>> os.getcwd() # 獲取當(dāng)前的工作目錄
'C:\\Python34'
>>> os.chdir('/server/accesslogs') # 修改當(dāng)前的工作目錄
>>> os.system('mkdir today') # 執(zhí)行系統(tǒng)命令 mkdir
9.2 shutil 模塊
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
9.3 文件通配符
glob模塊提供了一個(gè)函數(shù)用于從目錄通配符搜索中生成文件列表:
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
9.4 命令行參數(shù)
通用工具腳本經(jīng)常調(diào)用命令行參數(shù)。這些命令行參數(shù)以鏈表形式存儲(chǔ)于 sys 模塊的 argv 變量。例如在命令行中執(zhí)行 "python demo.py one two three" 后可以得到以下輸出結(jié)果:
>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']
大多腳本的定向終止都使用 sys.exit()。
9.5 字符串正則匹配
re模塊為高級(jí)字符串處理提供了正則表達(dá)式工具。對(duì)于復(fù)雜的匹配和處理,正則表達(dá)式提供了簡(jiǎn)潔、優(yōu)化的解決方案:
>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
9.6 數(shù)學(xué)
math 模塊為浮點(diǎn)運(yùn)算提供了對(duì)底層C函數(shù)庫的訪問:
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
random 提供了生成隨機(jī)數(shù)的工具。
>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10) # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random() # random float
0.17970987693706186
>>> random.randrange(6) # random integer chosen from range(6)
4
9.7 訪問互聯(lián)網(wǎng)
有幾個(gè)模塊用于訪問互聯(lián)網(wǎng)以及處理網(wǎng)絡(luò)通信協(xié)議。其中最簡(jiǎn)單的兩個(gè)是用于處理從 urls 接收的數(shù)據(jù)的 urllib.request 以及用于發(fā)送電子郵件的 smtplib:
>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
... line = line.decode('utf-8') # Decoding the binary data to text.
... if 'EST' in line or 'EDT' in line: # look for Eastern Time
... print(line)
<BR>Nov. 25, 09:43:32 PM EST
>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()
注意第二個(gè)例子需要本地有一個(gè)在運(yùn)行的郵件服務(wù)器。
9.8 日期和時(shí)間
datetime模塊為日期和時(shí)間處理同時(shí)提供了簡(jiǎn)單和復(fù)雜的方法。
支持日期和時(shí)間算法的同時(shí),實(shí)現(xiàn)的重點(diǎn)放在更有效的處理和格式化輸出。
該模塊還支持時(shí)區(qū)處理:
>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368
9.9 數(shù)據(jù)壓縮
以下模塊直接支持通用的數(shù)據(jù)打包和壓縮格式:zlib,gzip,bz2,zipfile,以及 tarfile。
>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979