Python基礎(chǔ)知識(shí)記錄

一、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 語句

Pythonfrom 語句讓你從模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中。語法如下:

from modname import name1[, name2[, ... nameN]]

例如,要導(dǎo)入模塊 supportprintPersonName 函數(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ì)模塊位置的搜索順序是:

  1. 當(dāng)前目錄
  2. 如果不在當(dāng)前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個(gè)目錄。
  3. 如果都找不到,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é)了這幾種模式:

image
模式 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)與cdnewdir的目錄里面了,chdir() 方法需要的一個(gè)參數(shù)是你想設(shè)成當(dāng)前目錄的目錄名稱。
getcwd() os.getcwd() 顯示當(dāng)前的工作目錄
rmdir() os.rmdir('dirname') 刪除目錄,目錄名稱以參數(shù)傳遞。在刪除這個(gè)目錄之前,它的所有內(nèi)容應(yīng)該先被清除。

八、類

類的專有方法:

  1. __init__ : 構(gòu)造函數(shù),在生成對(duì)象時(shí)調(diào)用
  2. __del__ : 析構(gòu)函數(shù),釋放對(duì)象時(shí)使用
  3. __repr__ : 打印,轉(zhuǎn)換
  4. __setitem__ : 按照索引賦值
  5. __getitem__: 按照索引獲取值
  6. __len__: 獲得長(zhǎng)度
  7. __cmp__: 比較運(yùn)算
  8. __call__: 函數(shù)調(diào)用
  9. __add__: 加運(yùn)算
  10. __sub__: 減運(yùn)算
  11. __mul__: 乘運(yùn)算
  12. __truediv__: 除運(yùn)算
  13. __mod__: 求余運(yùn)算
  14. __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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容