一啃沪、Python數(shù)據(jù)類型轉(zhuǎn)換
函數(shù) | 描述 |
---|---|
int(x [,base]) | 將x轉(zhuǎn)換為一個整數(shù) |
long(x [,base] ) | 將x轉(zhuǎn)換為一個長整數(shù) |
float(x) | 將x轉(zhuǎn)換到一個浮點數(shù) |
complex(real [,imag]) | 創(chuàng)建一個復(fù)數(shù) |
str(x) | 將對象 x 轉(zhuǎn)換為字符串 |
repr(x) | 將對象 x 轉(zhuǎn)換為表達式字符串 |
eval(str) | 用來計算在字符串中的有效Python表達式,并返回一個對象 |
tuple(s) | 將序列 s 轉(zhuǎn)換為一個元組 |
list(s) | 將序列 s 轉(zhuǎn)換為一個列表 |
set(s) | 轉(zhuǎn)換為可變集合 |
dict(d) | 創(chuàng)建一個字典。d 必須是一個序列 (key,value)元組歇盼。 |
frozenset(s) | 轉(zhuǎn)換為不可變集合 |
chr(x) | 將一個整數(shù)轉(zhuǎn)換為一個字符 |
unichr(x) | 將一個整數(shù)轉(zhuǎn)換為Unicode字符 |
ord(x) | 將一個字符轉(zhuǎn)換為它的整數(shù)值 |
hex(x) | 將一個整數(shù)轉(zhuǎn)換為一個十六進制字符串 |
oct(x) | 將一個整數(shù)轉(zhuǎn)換為一個八進制字符串 |
二、Python隨機數(shù)函數(shù)
需要導(dǎo)入 random
import random
函數(shù) | 描述 |
---|---|
choice(seq) | 從序列的元素中隨機挑選一個元素藕施,比如random.choice(range(10))弹灭,從0到9中隨機挑選一個整數(shù)毁靶。 |
randrange ([start,] stop [,step]) | 從指定范圍內(nèi),按指定基數(shù)遞增的集合中獲取一個隨機數(shù)蛮位,基數(shù)默認值為 1 |
random() | 隨機生成下一個實數(shù)较沪,它在[0,1)范圍內(nèi)鳞绕。 |
seed([x]) | 改變隨機數(shù)生成器的種子seed。如果你不了解其原理尸曼,你不必特別去設(shè)定seed们何,Python會幫你選擇seed。 |
shuffle(lst) | 將序列的所有元素隨機排序 |
uniform(x, y) | 隨機生成下一個實數(shù)控轿,它在[x,y]范圍內(nèi)冤竹。 |
三镀迂、Python轉(zhuǎn)義字符
轉(zhuǎn)義字符 | 描述 |
---|---|
\ (在行尾時) |
續(xù)行符 |
\\ |
反斜杠符號 |
\' |
單引號 |
\" |
雙引號 |
\a |
響鈴 |
\b |
退格(Backspace) |
\e |
轉(zhuǎn)義 |
\000 |
空 |
\n |
換行 |
\v |
縱向制表符 |
\t |
橫向制表符 |
\r |
回車 |
\f |
換頁 |
\oyy |
八進制數(shù)闸氮,yy 代表的字符,例如:\o12 代表換行 |
\xyy |
十六進制數(shù)控汉,yy 代表的字符在抛,例如:\x0a 代表換行 |
\other |
其它的字符以普通格式輸出 |
四钟病、數(shù)組
4.1 Python列表腳本操作符
Python 表達式 | 結(jié)果 | 描述 |
---|---|---|
len([1, 2, 3]) | 3 | 長度 |
[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 表達式 | 結(jié)果 | 描述 |
---|---|---|
L[2] | 'Taobao' | 讀取列表中第三個元素 |
L[-2] | 'Runoob' | 讀取列表中倒數(shù)第二個元素 |
L[1:] | ['Runoob', 'Taobao'] | 從第二個元素開始截取列表 |
4.3 Python列表函數(shù)&方法
序號 | 函數(shù) |
---|---|
1 | cmp(list1, list2) 比較兩個列表的元素 |
2 | len(list) 列表元素個數(shù) |
3 | max(list) 返回列表元素最大值 |
4 | min(list) 返回列表元素最小值 |
5 | list(seq) 將元組轉(zhuǎn)換為列表 |
序號 | 方法 |
---|---|
1 | list.append(obj) 在列表末尾添加新的對象 |
2 | list.count(obj) 統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù) |
3 | list.extend(seq) 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表) |
4 | list.index(obj) 從列表中找出某個值第一個匹配項的索引位置 |
5 | list.insert(index, obj) 將對象插入列表 |
6 | list.pop([index=-1]) 移除列表中的一個元素(默認最后一個元素),并且返回該元素的值 |
7 | list.remove(obj) 移除列表中某個值的第一個匹配項 |
8 | list.reverse() 反向列表中元素 |
9 | list.sort(cmp=None, key=None, reverse=False) 對原列表進行排序 |
五霜定、字典
序號 | 函數(shù)及描述 |
---|---|
1 | dict.clear() 刪除字典內(nèi)所有元素 |
2 | dict.copy() 返回一個字典的淺復(fù)制 |
3 | dict.fromkeys(seq[, val]) 創(chuàng)建一個新字典档悠,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對應(yīng)的初始值 |
4 | dict.get(key, default=None) 返回指定鍵的值望浩,如果值不在字典中返回default值 |
5 | dict.has_key(key) 如果鍵在字典dict里返回true辖所,否則返回false |
6 | dict.items() 以列表返回可遍歷的(鍵, 值) 元組數(shù)組 |
7 | dict.keys() 以列表返回一個字典所有的鍵 |
8 | dict.setdefault(key, default=None) 和get()類似, 但如果鍵不存在于字典中,將會添加鍵并將值設(shè)為default |
9 | dict.update(dict2) 把字典dict2的鍵/值對更新到dict里 |
10 | dict.values() 以列表返回字典中的所有值 |
11 | pop(key[,default]) 刪除字典給定鍵 key 所對應(yīng)的值磨德,返回值為被刪除的值缘回。key值必須給出。 否則典挑,返回default值酥宴。 |
12 | popitem() 返回并刪除字典中的最后一對鍵和值。 |
六您觉、日期和時間
import time
import calendar
6.1 time 模塊
- 獲取當前時間
ticks = time.time()
當前時間戳: 1599991315.920578
- 本地時間
localtime = time.localtime(time.time())
本地時間: 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)
- 獲取格式化的時間
localtime = time.asctime( time.localtime(time.time()) )
格式化時間: Sun Sep 13 18:04:21 2020
- 格式化日期
符號 | 描述 |
---|---|
%y | 兩位數(shù)的年份表示(00-99) |
%Y | 四位數(shù)的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月內(nèi)中的一天(0-31) |
%H | 24小時制小時數(shù)(0-23) |
%I | 12小時制小時數(shù)(01-12) |
%M | 分鐘數(shù)(00-59) |
%S | 秒(00-59) |
%a | 本地簡化星期名稱 |
%A | 本地完整星期名稱 |
%b | 本地簡化的月份名稱 |
%B | 本地完整的月份名稱 |
%c | 本地相應(yīng)的日期表示和時間表示 |
%j | 年內(nèi)的一天(001-366) |
%p | 本地A.M.或P.M.的等價符 |
%U | 一年中的星期數(shù)(00-53)星期天為星期的開始 |
%w | 星期(0-6)拙寡,星期天為星期的開始 |
%W | 一年中的星期數(shù)(00-53)星期一為星期的開始 |
%x | 本地相應(yīng)的日期表示 |
%X | 本地相應(yīng)的時間表示 |
%Z | 當前時區(qū)的名稱 |
%% | %號本身 |
五、函數(shù)
可更改(mutable
)與不可更改(immutable
)對象
在 python
中琳水,strings
, tuples
, 和 numbers
是不可更改的對象肆糕,而 list
, dict
等則是可以修改的對象。
不可變類型:變量賦值
a=5
后再賦值a=10
在孝,這里實際是新生成一個int
值對象10
诚啃,再讓a
指向它,而5
被丟棄私沮,不是改變a
的值始赎,相當于新生成了a
。可變類型:變量賦值
la=[1,2,3,4]
后再賦值la[2]=5
則是將list la
的第三個元素值更改,本身la
沒有動造垛,只是其內(nèi)部的一部分值被修改了魔招。
python 函數(shù)的參數(shù)傳遞:
不可變類型:類似
c++
的值傳遞,如 整數(shù)筋搏、字符串仆百、元組厕隧。如fun(a)
奔脐,傳遞的只是a
的值,沒有影響a
對象本身吁讨。比如在fun(a)
內(nèi)部修改a
的值髓迎,只是修改另一個復(fù)制的對象,不會影響a
本身建丧。可變類型:類似
c++
的引用傳遞排龄,如 列表,字典翎朱。如fun(la)
橄维,則是將la
真正的傳過去,修改后fun
外部的la
也會受影響
python
中一切都是對象拴曲,嚴格意義我們不能說值傳遞還是引用傳遞争舞,我們應(yīng)該說傳不可變對象和傳可變對象。
六澈灼、模塊
support.py
文件
supDic = {
"name": "loongod",
"age": 31,
"weight": 120
}
def printPersonName(person):
print("this person's name ", person)
return
6.1 import
當解釋器遇到 import
語句竞川,如果模塊在當前的搜索路徑就會被導(dǎo)入。
搜索路徑是一個解釋器會先進行搜索的所有目錄的列表叁熔。如想要導(dǎo)入模塊 support.py
委乌,需要把命令放在腳本的頂端:
# 導(dǎo)入模塊
import support
# 現(xiàn)在可以調(diào)用模塊里包含的函數(shù)了
support.printPersonName("Runoob")
一個模塊只會被導(dǎo)入一次,不管你執(zhí)行了多少次 import
荣回。這樣可以防止導(dǎo)入模塊被一遍又一遍地執(zhí)行遭贸。
6.2 from…import 語句
Python
的 from
語句讓你從模塊中導(dǎo)入一個指定的部分到當前命名空間中。語法如下:
from modname import name1[, name2[, ... nameN]]
例如心软,要導(dǎo)入模塊 support
的 printPersonName
函數(shù)壕吹,使用如下語句:
from support import printPersonName
// 調(diào)用如下
printPersonName('loongod')
這個聲明不會把整個 support
模塊導(dǎo)入到當前的命名空間中,它只會將 support
里的 printPersonName
單個引入到執(zhí)行這個聲明的模塊的全局符號表糯累。
6.3 from…import* 語句
把一個模塊的 所有內(nèi)容全都導(dǎo)入 到當前的命名空間也是可行的算利,只需使用如下聲明:
from modname import *
這提供了一個簡單的方法來導(dǎo)入一個模塊中的所有項目。然而這種聲明不該被過多地使用泳姐。
例如我們想一次性引入 math
模塊中所有的東西效拭,語句如下:
from math import *
6.4 搜索路徑
當你導(dǎo)入一個模塊,Python
解析器對模塊位置的搜索順序是:
- 當前目錄
- 如果不在當前目錄,
Python
則搜索在shell
變量PYTHONPATH
下的每個目錄缎患。 - 如果都找不到慕的,
Python
會察看默認路徑。UNIX
下挤渔,默認路徑一般 為/usr/local/lib/python/
肮街。
模塊搜索路徑存儲在 system
模塊的 sys.path
變量中。變量里包含當前目錄判导,PYTHONPATH
和由安裝過程決定的默認目錄嫉父。
七、文件 I/O
-
input([prompt])
:標準輸入讀入一行文本眼刃,默認的標準輸入是鍵盤
7.1 打開和關(guān)閉文件
** open 函數(shù) **
你必須先用Python內(nèi)置的open()函數(shù)打開一個文件绕辖,創(chuàng)建一個file對象,相關(guān)的方法才可以調(diào)用它進行讀寫擂红。
語法:file object = open(file_name [, access_mode][, buffering])
各個參數(shù)的細節(jié)如下:
-
file_name
:file_name變量是一個包含了你要訪問的文件名稱的字符串值仪际。 -
access_mode
:access_mode決定了打開文件的模式:只讀,寫入昵骤,追加等树碱。所有可取值見如下的完全列表。這個參數(shù)是非強制的变秦,默認文件訪問模式為只讀(r)成榜。 -
buffering
: 如果buffering的值被設(shè)為0,就不會有寄存伴栓。如果buffering的值取1伦连,訪問文件時會寄存行。如果將buffering的值設(shè)為大于1的整數(shù)钳垮,表明了這就是的寄存區(qū)的緩沖大小惑淳。如果取負值,寄存區(qū)的緩沖大小則為系統(tǒng)默認饺窿。
模式 | 描述 |
---|---|
t | 文本模式 (默認)歧焦。 |
x | 寫模式,新建一個文件肚医,如果該文件已存在則會報錯绢馍。 |
b | 二進制模式。 |
+ | 打開一個文件進行更新(可讀可寫)肠套。 |
U | 通用換行模式(不推薦)舰涌。 |
r | 以只讀方式打開文件。文件的指針將會放在文件的開頭你稚。這是默認模式瓷耙。 |
rb | 以二進制格式打開一個文件用于只讀朱躺。文件指針將會放在文件的開頭。這是默認模式搁痛。一般用于非文本文件如圖片等长搀。 |
r+ | 打開一個文件用于讀寫。文件指針將會放在文件的開頭鸡典。 |
rb+ | 以二進制格式打開一個文件用于讀寫源请。文件指針將會放在文件的開頭。一般用于非文本文件如圖片等彻况。 |
w | 打開一個文件只用于寫入谁尸。如果該文件已存在則打開文件,并從開頭開始編輯疗垛,即原有內(nèi)容會被刪除症汹。如果該文件不存在,創(chuàng)建新文件贷腕。 |
wb | 以二進制格式打開一個文件只用于寫入。如果該文件已存在則打開文件咬展,并從開頭開始編輯泽裳,即原有內(nèi)容會被刪除。如果該文件不存在破婆,創(chuàng)建新文件涮总。一般用于非文本文件如圖片等。 |
w+ | 打開一個文件用于讀寫祷舀。如果該文件已存在則打開文件瀑梗,并從開頭開始編輯,即原有內(nèi)容會被刪除裳扯。如果該文件不存在抛丽,創(chuàng)建新文件。 |
wb+ | 以二進制格式打開一個文件用于讀寫饰豺。如果該文件已存在則打開文件亿鲜,并從開頭開始編輯,即原有內(nèi)容會被刪除冤吨。如果該文件不存在蒿柳,創(chuàng)建新文件。一般用于非文本文件如圖片等漩蟆。 |
a | 打開一個文件用于追加垒探。如果該文件已存在,文件指針將會放在文件的結(jié)尾怠李。也就是說圾叼,新的內(nèi)容將會被寫入到已有內(nèi)容之后仔引。如果該文件不存在,創(chuàng)建新文件進行寫入褐奥。 |
ab | 以二進制格式打開一個文件用于追加咖耘。如果該文件已存在,文件指針將會放在文件的結(jié)尾撬码。也就是說儿倒,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在呜笑,創(chuàng)建新文件進行寫入夫否。 |
a+ | 打開一個文件用于讀寫。如果該文件已存在叫胁,文件指針將會放在文件的結(jié)尾凰慈。文件打開時會是追加模式。如果該文件不存在驼鹅,創(chuàng)建新文件用于讀寫微谓。 |
ab+ | 以二進制格式打開一個文件用于追加。如果該文件已存在输钩,文件指針將會放在文件的結(jié)尾豺型。如果該文件不存在,創(chuàng)建新文件用于讀寫买乃。 |
下圖很好的總結(jié)了這幾種模式:
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
讀 | + | + | + | + | ||
寫 | + | + | + | + | + | |
創(chuàng)建 | + | + | + | + | ||
覆蓋 | + | + | ||||
指針在開始 | + | + | + | + | ||
指針在結(jié)尾 | + | + |
read()
方法從一個打開的文件中讀取一個字符串姻氨。需要重點注意的是,Python字符串可以是二進制數(shù)據(jù)剪验,而不是僅僅是文字肴焊。
fileObject.read([count])
在這里,被傳遞的參數(shù)是要從已打開文件中讀取的字節(jié)計數(shù)功戚。該方法從文件的開頭開始讀入娶眷,如果沒有傳入count,它會嘗試盡可能多地讀取更多的內(nèi)容疫铜,很可能是直到文件的末尾茂浮。
close()
方法:
當一個文件對象的引用被重新指定給另一個文件時,Python 會關(guān)閉之前的文件壳咕。用 close()方法關(guān)閉文件是一個很好的習(xí)慣席揽。
tell()
方法告訴你文件內(nèi)的當前位置, 換句話說,下一次的讀寫會發(fā)生在文件開頭這么多字節(jié)之后谓厘。
seek(offset [,from])
方法改變當前文件的位置幌羞。Offset變量表示要移動的字節(jié)數(shù)。From變量指定開始移動字節(jié)的參考位置竟稳。
如果from被設(shè)為0属桦,這意味著將文件的開頭作為移動字節(jié)的參考位置熊痴。如果設(shè)為1,則使用當前的位置作為參考位置聂宾。如果它被設(shè)為2果善,那么該文件的末尾將作為參考位置。
# 打開一個文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "讀取的字符串是 : ", str
# 查找當前位置
position = fo.tell()
print "當前文件位置 : ", position
# 把指針再次重新定位到文件開頭
position = fo.seek(0, 0)
str = fo.read(10)
print "重新讀取字符串 : ", str
# 關(guān)閉打開的文件
fo.close()
7.2 File 對象的屬性
一個文件被打開后系谐,你有一個file對象巾陕,你可以得到有關(guān)該文件的各種信息。
以下是和file對象相關(guān)的所有屬性的列表:
屬性 | 描述 |
---|---|
file.closed | 返回true如果文件已被關(guān)閉纪他,否則返回false鄙煤。 |
file.mode | 返回被打開文件的訪問模式。 |
file.name | 返回文件的名稱茶袒。 |
file.softspace | 如果用print輸出后梯刚,必須跟一個空格符,則返回false薪寓。否則返回true亡资。 |
file 方法
序號 | 方法及描述 |
---|---|
1 | file.close()關(guān)閉文件。關(guān)閉后文件不能再進行讀寫操作预愤。 |
2 | file.flush()刷新文件內(nèi)部緩沖沟于,直接把內(nèi)部緩沖區(qū)的數(shù)據(jù)立刻寫入文件, 而不是被動的等待輸出緩沖區(qū)寫入。 |
3 | file.fileno()返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上植康。 |
4 | file.isatty()如果文件連接到一個終端設(shè)備返回 True,否則返回 False展懈。 |
5 | file.next()返回文件下一行销睁。 |
6 | file.read([size])從文件讀取指定的字節(jié)數(shù),如果未給定或為負則讀取所有存崖。 |
7 | file.readline([size])讀取整行冻记,包括 "\n" 字符。 |
8 | file.readlines([sizeint])讀取所有行并返回列表来惧,若給定sizeint>0冗栗,則是設(shè)置一次讀多少字節(jié),這是為了減輕讀取壓力供搀。 |
9 | file.seek(offset[, whence])設(shè)置文件當前位置 |
10 | file.tell()返回文件當前位置隅居。 |
11 | file.truncate([size])截取文件,截取的字節(jié)通過size指定葛虐,默認為當前文件位置胎源。 |
12 | file.write(str)將字符串寫入文件,返回的是寫入的字符長度屿脐。 |
13 | file.writelines(sequence)向文件寫入一個序列字符串列表涕蚤,如果需要換行則要自己加入每行的換行符宪卿。 |
7.3 重命名和刪除文件
Python的os模塊提供了幫你執(zhí)行文件處理操作的方法,比如重命名和刪除文件万栅。
要使用這個模塊佑钾,你必須先導(dǎo)入它,然后才可以調(diào)用相關(guān)的各種功能烦粒。
rename()方法:
rename()方法需要兩個參數(shù)休溶,當前的文件名和新文件名。
語法:os.rename(current_file_name, new_file_name)
import os
# 重命名文件test1.txt到test2.txt撒遣。
os.rename( "test1.txt", "test2.txt" )
remove()方法, 你可以用remove()方法刪除文件邮偎,需要提供要刪除的文件名作為參數(shù)。
語法:os.remove(file_name)
import os
# 刪除一個已經(jīng)存在的文件test2.txt
os.remove("test2.txt")
7.4 Python里的目錄
所有文件都包含在各個不同的目錄下义黎,不過Python也能輕松處理禾进。os模塊有許多方法能幫你創(chuàng)建,刪除和更改目錄廉涕。
函數(shù) | 語法 | 解釋 |
---|---|---|
mkdir() |
os.mkdir("newdir") |
可以使用 os 模塊的 mkdir() 方法在當前目錄下創(chuàng)建新的目錄們泻云。你需要提供一個包含了要創(chuàng)建的目錄名稱的參數(shù)。 |
chdir() |
os.chdir("newdir") |
可以用 chdir() 方法來改變當前的工作目錄狐蜕。像當與cd 到newdir 的目錄里面了宠纯,chdir() 方法需要的一個參數(shù)是你想設(shè)成當前目錄的目錄名稱。 |
getcwd() |
os.getcwd() |
顯示當前的工作目錄 |
rmdir() |
os.rmdir('dirname') |
刪除目錄层释,目錄名稱以參數(shù)傳遞婆瓜。在刪除這個目錄之前,它的所有內(nèi)容應(yīng)該先被清除贡羔。 |
八廉白、類
類的專有方法:
-
__init__
: 構(gòu)造函數(shù),在生成對象時調(diào)用 -
__del__
: 析構(gòu)函數(shù)乖寒,釋放對象時使用 -
__repr__
: 打印猴蹂,轉(zhuǎn)換 -
__setitem__
: 按照索引賦值 -
__getitem__
: 按照索引獲取值 -
__len__
: 獲得長度 -
__cmp__
: 比較運算 -
__call__
: 函數(shù)調(diào)用 -
__add__
: 加運算 -
__sub__
: 減運算 -
__mul__
: 乘運算 -
__truediv__
: 除運算 -
__mod__
: 求余運算 -
__pow__
: 乘方
九、Python3 標準庫概覽
9.1 os 模塊
>>> import os
>>> os.getcwd() # 獲取當前的工作目錄
'C:\\Python34'
>>> os.chdir('/server/accesslogs') # 修改當前的工作目錄
>>> 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模塊提供了一個函數(shù)用于從目錄通配符搜索中生成文件列表:
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
9.4 命令行參數(shù)
通用工具腳本經(jīng)常調(diào)用命令行參數(shù)楣嘁。這些命令行參數(shù)以鏈表形式存儲于 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
模塊為高級字符串處理提供了正則表達式工具逐虚。對于復(fù)雜的匹配和處理聋溜,正則表達式提供了簡潔、優(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
模塊為浮點運算提供了對底層C函數(shù)庫的訪問:
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
random
提供了生成隨機數(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)
有幾個模塊用于訪問互聯(lián)網(wǎng)以及處理網(wǎng)絡(luò)通信協(xié)議勤婚。其中最簡單的兩個是用于處理從 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()
注意第二個例子需要本地有一個在運行的郵件服務(wù)器。
9.8 日期和時間
datetime模塊為日期和時間處理同時提供了簡單和復(fù)雜的方法涤伐。
支持日期和時間算法的同時馒胆,實現(xiàn)的重點放在更有效的處理和格式化輸出缨称。
該模塊還支持時區(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