Python变量和对象类型速记手册
變量和對(duì)象類型
Python中關(guān)于變量和對(duì)象類型有一些重要的概念:
| 變量不受類型約束 | 變量并不是一塊內(nèi)存空間的標(biāo)簽,只是對(duì)象的名字,是沒(méi)有類型的,相當(dāng)于一個(gè)可以指向任何對(duì)象void指針。類型屬于對(duì)象,而不是變量。 |
| 動(dòng)態(tài)類型 | 它自動(dòng)地跟蹤你的類型而不是要求聲明代碼;Python中沒(méi)有類型聲明,運(yùn)行的表達(dá)式,決定了建立和使用的對(duì)象的類型 |
| 強(qiáng)類型 | 類型是不可變的,一旦發(fā)生強(qiáng)制類型轉(zhuǎn)換,則意味著新的對(duì)象的建立。你只能對(duì)一個(gè)對(duì)象進(jìn)行有效的操作。 |
| 多態(tài) | 由于類型不受約束,Python編寫(xiě)的操作通常可以自動(dòng)地適用于不同類型的對(duì)象,只要他們支持一種兼容的接口(類似C++里模板的概念),就像‘+’操作對(duì)于數(shù)字為加法,對(duì)于序列為合并。 |
| 對(duì)象頭部信息 | 對(duì)象的內(nèi)存空間,除了值外,還有 1 一個(gè)類型標(biāo)識(shí)符(標(biāo)識(shí)對(duì)象類型) 2 一個(gè)應(yīng)用計(jì)數(shù)器(用來(lái)決定是不是可以回收這個(gè)對(duì)象)sys.getrefcount(1) |
| 對(duì)象類型檢測(cè) | 在Python中,我們編寫(xiě)對(duì)象接口而不是類型。不關(guān)注與特定類型意味著代碼會(huì)自動(dòng)地適應(yīng)于他們中的很多類型:任何具有兼容接口的對(duì)象均能工作。 1. type(L) == type([]) 2. type(L) == list 3. isinstance(L,list) 盡管支持類型檢測(cè),但這并不是一個(gè)“Python式”的思維方式,破壞了代碼的靈活性。 |
| 賦值 | 基本賦值、元組賦值、列表賦值和多目標(biāo)賦值。在賦值語(yǔ)句中,即使沒(méi)有圓括號(hào),也能識(shí)別出來(lái)這是一個(gè)元組。 序列賦值語(yǔ)句:支持右側(cè)任何可迭代對(duì)象(左右元素?cái)?shù)目相同) [a,b,c] = (1,2,3)或 [a,b,c] = '123'或 red,green,blue = range(3) 交換值不需要中間變量 需要注意引用的陷阱: 對(duì)于支持原地修改的對(duì)象而言,增強(qiáng)賦值語(yǔ)句會(huì)執(zhí)行原地修改運(yùn)算L.append(4) L.extend([7,8]),比合并(復(fù)制過(guò)程)L = L + [4] 執(zhí)行得更快. 隱式賦值語(yǔ)句:模塊導(dǎo)入import,from;函數(shù)和類的定義def,class;for循環(huán)變量;函數(shù)參數(shù) |
| 在函數(shù)中接收元組和列表 | 當(dāng)要使函數(shù)接收元組或字典形式的參數(shù)的時(shí)候,有一種特殊的方法,它分別使用*和**前綴。這種方法在函數(shù)需要獲取可變數(shù)量的參數(shù)的時(shí)候特別有用。
? |
| 引用傳遞 | 在 Python 中所有賦值操作都是“引用傳遞”。當(dāng)把一個(gè)對(duì)象賦給一個(gè)數(shù)據(jù)結(jié)構(gòu)元素或者變量名時(shí),Python總是會(huì)存儲(chǔ)對(duì)象的引用,而不是對(duì)象的一個(gè)拷貝(除非明確要求拷貝)。 通過(guò)將一些基本數(shù)據(jù)類型(數(shù)值、字符串、元組)設(shè)為不可改變對(duì)象,可以模擬“值傳遞”,例如: userName = ‘tonyseek’?? #字符串對(duì)象為不可變對(duì)象,保護(hù)完整性 otherUserName = ‘It’s not tonyseek’? #改變的不是userName指向的內(nèi)容 |
| 存儲(chǔ)對(duì)象引用 | 列表和元組都被認(rèn)為是“對(duì)象引用”的數(shù)組(在標(biāo)準(zhǔn)Python解釋器內(nèi)部,就是C數(shù)組而不是鏈接結(jié)構(gòu),索引速度較快)。 |
| 淺拷貝和深拷貝 | 淺拷貝只拷貝頂層結(jié)構(gòu),深拷貝是遞歸的拷貝。 如果你想要復(fù)制一個(gè)列表或者類似的序列或者其他復(fù)雜的對(duì)象(不是如整數(shù)那樣的簡(jiǎn)單對(duì)象 ),那么你可以使用切片操作符來(lái)取得拷貝。如果你只是想要使用另一個(gè)變量名,兩個(gè)名稱都 參考 同一個(gè)對(duì)象,那么如果你不小心的話,可能會(huì)引來(lái)各種麻煩。 X = [1,2,3] L1 = [X,X,X] L2 = [X[:],list(X),copy.copy()] #頂層復(fù)制 L.append(L) #無(wú)限循環(huán)對(duì)象,復(fù)合對(duì)象包含指向自身的引用· |
| 不變對(duì)象的緩存和復(fù)用 | 作為一種優(yōu)化,Python緩存了不變的對(duì)象并對(duì)其進(jìn)行復(fù)用,例如小的整數(shù)和字符串。因?yàn)椴荒芨淖償?shù)字和字符串,所以無(wú)論對(duì)同一個(gè)對(duì)象有多少個(gè)引用都沒(méi)有關(guān)系,從邏輯的角度看,這工作起來(lái)就像每一個(gè)表達(dá)式結(jié)果的值都是一個(gè)不同的對(duì)象,而每一個(gè)對(duì)象都是不同的內(nèi)存。 |
| 垃圾收集 | 當(dāng)最后一次引用對(duì)象后(例如,將這個(gè)變量用其他的值進(jìn)行賦值),這個(gè)對(duì)象所有占用的內(nèi)存空間將會(huì)自動(dòng)清理掉 |
?
Python中有幾種主要的核心數(shù)據(jù)類型:
1 數(shù)值【不可變】
| 負(fù)數(shù) | -x |
| 正數(shù) | +x |
| 按位翻轉(zhuǎn) | ~x=-(x+1) |
| 絕對(duì)值 | abs(x) 若x位復(fù)數(shù),返回復(fù)數(shù)模 |
| 用x除以y,返回包含商和余數(shù)的tuple值(int(x/y),x%y) | divmod(x, y) |
| x的y次幕(x ** y ) x % modulo | pow(x ,y [,modulo]) 返回值類型與x同 |
| 復(fù)數(shù) | complex (x[,y]) 將x做實(shí)部,y做虛部創(chuàng)建復(fù)數(shù) |
| 整數(shù) | int(x) 將字符串和數(shù)字轉(zhuǎn)換為整數(shù),對(duì)浮點(diǎn)進(jìn)行舍位而非舍入 long(x) 將字符串和數(shù)字轉(zhuǎn)換為長(zhǎng)整形 |
| 浮點(diǎn)數(shù) | float(x) 將str和num轉(zhuǎn)換為浮點(diǎn)對(duì)象 |
| 四舍五入,n為小數(shù)點(diǎn)位數(shù) | round(x[,n]) |
| 進(jìn)制轉(zhuǎn)換 | hex(x) 將整數(shù)或長(zhǎng)整數(shù)轉(zhuǎn)換為十六進(jìn)制字符串 oct(x) 將整數(shù)或長(zhǎng)整數(shù)轉(zhuǎn)換為八進(jìn)制字符串 |
| 平方根 | math.sqrt(math.pi*85) |
| >= x?的最小整數(shù) | math.ceil(x) |
| <= x的最大整數(shù) | math.floor(x) |
| 對(duì)?x?朝向 0 取整 | math.trunc(x) |
| 隨機(jī):數(shù)字生成 | >>> random.random()?? #浮點(diǎn)數(shù),x in the interval [0, 1) >>> random.getrandbits(16) #a python?long?int with?k?random bits 9213L >>> random.uniform(1,1000) #浮點(diǎn)數(shù)in the range [a, b) or [a, b] 400.88489201157114 >>> random.randint(1,1000) #整數(shù)random integer in range [a, b] 不推薦使用 817 >>> random.randrange(0,1001,2) #整數(shù)from range([start,] stop[, step]) 推薦使用 822 |
| 隨機(jī):序列操作sequences generate random permutation | >>> random.choice([0,1,2,3]) #a random element >>> random.sample(xrange(10000000), 3) #unique random elements >>> random.shuffle(list)? #洗牌,就地shuffle list,無(wú)返回值.可選參數(shù)random是一個(gè)返回[0.0, 1.0)間浮點(diǎn)數(shù)的無(wú)參函數(shù)名,默認(rèn)為random.random. |
| On the real line, there are functions to compute uniform, normal (Gaussian), lognormal, negative exponential, gamma, and beta distributions. For generating distributions of angles, the von Mises distribution is available. | ? |
- 整型int
- 長(zhǎng)整型long(無(wú)限精度)
- 浮點(diǎn)數(shù)float(雙精度)
- 十進(jìn)制數(shù)/小數(shù)decimal(固定精度浮點(diǎn)數(shù))
- 復(fù)數(shù)complex
- 分?jǐn)?shù)fraction
2 序列【有序】【索引:偏移量】?
| 序列通用型操作 | 內(nèi)置函數(shù)或表達(dá)式 |
| 合并 | ‘+’ 不允許+表達(dá)式中混合數(shù)字和字符串,使用'123'+str(9)或者int('123')+9 |
| 重復(fù) | ‘*’ >>> print '----------------------------------------' >>> print '-'*40 |
| 索引(dictionary使用鍵) | seq[i]=seq[len(seq)-i],i是偏移量 |
| 切片 | seq[i:j:d](步長(zhǎng)d=-1表示分片將會(huì)從右至左進(jìn)行,實(shí)際效果就是反轉(zhuǎn)序列) 將列表片段重新賦值 s[i :j ] = r? 刪除列表中一個(gè)片段 del s[i :j ] |
| 求長(zhǎng)度(dictionary,set支持) | len(seq) |
| 單個(gè)最大/最小值 | max(seq),min(seq) |
| 每項(xiàng)最大/最小值組成的序列 | max(seq[,…]),min(seq[,…]) |
| 迭代協(xié)議 | 列表解析,in成員關(guān)系測(cè)試,map內(nèi)置函數(shù)以及sorted,sum,any,all調(diào)用等其他內(nèi)置函數(shù) |
| sum,any,all | sum返回可迭代對(duì)象中所有數(shù)字的和,可迭代對(duì)象中的任何/全部元素為T(mén)rue,any/all內(nèi)置函數(shù)返回True |
| 排序(dictionary返回鍵的列表,set支持,tuple不支持) | sorted(seq) t = tuple(sorted(list(t)))? 操作sorted(seq)返回對(duì)象;方法seq.sort()(tuple不支持)排序后不返回對(duì)象 |
| 從屬關(guān)系(dictionary,set支持) | x in seq, x not in seq |
| 迭代 | 遍歷訪問(wèn)元素:for x in seq: 遍歷訪問(wèn)元素和索引:for index, item in enumerate(sequence):? 使用range來(lái)產(chǎn)生索引:range(2,9,2) >>> range(0,10) 同時(shí)遍歷多個(gè)序列:zip(L1,L2)/map(None,L1,L2) zip函數(shù)轉(zhuǎn)置二維列表: >>> l = [[1, 2, 3], [4, 5, 6]] >>> zip(*l) [(1, 4), (2, 5), (3, 6)] |
| 列表解析(dictionary,set支持) | 列表解析替代嵌套循環(huán):for循環(huán)和列表解析(通常比對(duì)應(yīng)的for循環(huán)運(yùn)行得更快)都是通用迭代工具,都能工作于遵守迭代協(xié)議的任意對(duì)象(可遍歷對(duì)象,包括可自逐行讀取的文件) >>> M = [[1,2,3],[4,5,6],[7,8,9]] >>> squares = [x**2 for x in [1,2,3,4,5]] >>> squares [1, 4, 9, 16, 25] 列表解析也可用于元組的轉(zhuǎn)換: >>> T = (1,2,3,4,5) >>> L = [x+20 for x in T] >>> L [21, 22, 23, 24, 25] >>> [line.upper() for line in open('script1.py')] |
| map調(diào)用 | >>> map(str.upper,open('script1.py')) #對(duì)可迭代對(duì)象每個(gè)元素都應(yīng)用一個(gè)函數(shù)調(diào)用 |
2.1 字符串string【同構(gòu)】【不可變】
| 字符的有序集合(雖然元素間沒(méi)有分隔符) | >>> set('abcde') |
| ‘\0’不會(huì)中斷字符串 | >>> s = "a\0b\tc\c"? |
| raw字符串 | r’\temp\spam’ |
| 類型方法 | find(s),isdigit(),isalpha() upper(),lower(),replace(s0,s1),split(‘’),rstrip() |
| 不可變:模擬改變?cè)M | 1 合并、分片、索引? 3 轉(zhuǎn)化為可變對(duì)象 |
| 字符串格式化 | s % type %[(name)][flags][width][.precision]code %[(鍵)][左對(duì)齊(-)正負(fù)號(hào)(+)補(bǔ)零(0)][整體寬度][.小數(shù)位數(shù)]code 基于元組的格式化:'%s is %d years old' % (name, age) 基于字典的格式化:'%s(age)d %(food)s' % vars() %s 任何對(duì)象的字符串表達(dá)(使用str) %r 任何對(duì)象的字符串表達(dá)(使用repr) %% 常量% |
| 正則表達(dá)式(使用模式定義字符串) 實(shí)現(xiàn)更多搜索,分割,替換 | >>> import re |
| 對(duì)象的字符串表達(dá) | str(o):string used by print(user-friendly) 打印(用戶友好) repr(o):as-code string used by echoes 交互式回顯 |
2.2 unicode字符串 【同構(gòu)】【不可變】 u’spam’
| 支持所有的字符串操作 | ? |
2.3 元組tuple【異構(gòu)】【不可變】??? t = (1,2,’3’)
| 不可變 | 元組的不可變性只適用于元組本身的頂層結(jié)構(gòu)而并非其內(nèi)容: >>>T = (1,[2,3],4) >>> T[1] = 'spam' >>> T[1][0] = ‘spam’ >>> T (1, ['spam', 3], 4) |
| 類似“常數(shù)”聲明:提供完整性約束 | 如果在程序中以元組的形式傳遞一個(gè)對(duì)象的集合,可以確保元組在程序中不會(huì)被另一個(gè)引用修改,而列表就沒(méi)有這樣的保證了。(利于編寫(xiě)大型程序) 與其他語(yǔ)言中的const概念不同,在Python中其是與對(duì)象相結(jié)合的(元組對(duì)象本身的不可變性),而不是變量。 |
2.4 列表list【異構(gòu)】【可變】????????? l = [1,2,’3’]
| 可變 | 禁止獲取一個(gè)不存在的元素 禁止邊界外的賦值 |
| 陷阱:遍歷并修改列表 | 簡(jiǎn)單的for循環(huán)并不能修改列表,和C++中的迭代器用法不一樣 C++(for語(yǔ)句+迭代器)遍歷并修改列表(輸出222) vector<int> vint; vector<int>::iterator i; vint.resize(3,1); for(i = vint.begin(); i != vint.end();++i) *i += 1; for(i = vint.begin(); i != vint.end();++i) cout << *i; Python的for語(yǔ)句(這種foreach概念在C++中是沒(méi)有的)不行: |
| 類型方法 | count(x),index(x) append(x),insert(i,x),extend(list) pop(i),remove(x),del L[i],del L[i:j] sort(),reverse() index(x)和remove(x)對(duì)匹配對(duì)象x的第一個(gè)元素進(jìn)行操作,無(wú)匹配時(shí)異常 |
3 映射【無(wú)序】【索引:鍵】
3.1 字典dictionary【異構(gòu)】【可變】 d = {1:’I’,2:’Love’,’3’:'Python’}
| 可變 | 對(duì)新的字典的鍵賦值,會(huì)創(chuàng)建該鍵?x[key] = value 可以刪除一個(gè)鍵值對(duì)? 禁止獲取一個(gè)不存在的鍵值?x[key] |
| 鍵 | Python的dict實(shí)現(xiàn),其實(shí)就是一個(gè)hash map,因此要求Key是hashable的 鍵為不可變對(duì)象:數(shù)字和字符串,只包括(像數(shù)字和字符串這樣的)不可變參數(shù)的元組,才可以作為字典中有效的鍵。大多數(shù)Python對(duì)象可以作為鍵;但它們必須是可哈希的對(duì)象。 像列表和字典這樣的可變類型,由于它們不是可哈希的,所以不能作為鍵。 也有一些可變對(duì)象(很少)是可哈希的。 |
| 唯一 | 一鍵對(duì)應(yīng)多個(gè)值是不允許的 |
| 獲取元素列表 | keys()返回鍵的列表,values()返回值的列表,items()返回tuples的列表 |
| 獲取元素迭代器 | iteritems(), iterkeys(), 和itervalues()這些函數(shù)與返回列表的對(duì)應(yīng)方法相似,只是它們返回惰性賦值的迭代器,所以節(jié)省內(nèi)存。 |
| ? | for k in d: 等價(jià)于 for k in d.keys(): |
| '+'有序合并操作失效 | update(x2) 用字典x2中的鍵/值對(duì)添加到原字典。重復(fù)鍵所對(duì)應(yīng)的原有條目的值將被新鍵所對(duì)應(yīng)的值所覆蓋。 |
| 其他類型方法 | get(x[,y]) 返回鍵x對(duì)應(yīng)的值。若未找到返回default的值(注意,參數(shù)default的默認(rèn)值為None)。get()方法和鍵查找(key-lookup)操作符( [ ] )相似,不同的是它允許你為不存在的鍵提供默認(rèn)值。如果該鍵不存在,也未給出它的默認(rèn)值,則返回None。此方法比采用鍵查找(key-lookup)更靈活,因?yàn)槟悴槐負(fù)?dān)心因鍵不存在而引發(fā)異常。 pop(key) ,del d[key] clear() 刪除詞典的所有條目。 |
| 構(gòu)造 | D0 = {'name' = 'Bob', 'age' = 42} D1 = dict(name = 'Bob', age = 42) D2 = dict.fromkeys(seq, val=None) 創(chuàng)建并返回一個(gè)新字典,以seq中的元素做該字典的鍵,val做該字典中所有鍵對(duì)應(yīng)的初始值(如果不提供此值,則默認(rèn)為None) D3 = dict(zip(keylist,vallist)) |
| 拷貝 | copy() 淺拷貝:返回字典的高層結(jié)構(gòu)的拷貝,但不復(fù)制嵌入結(jié)構(gòu),而復(fù)制那些結(jié)構(gòu)的引用。 copy模塊:copy.copy(x)?copy.deepcopy(x) |
| 避免獲取不存在的字典鍵錯(cuò)誤 | if d.has_keys(k)(最好使用if k in d)測(cè)試 get方法為不存在的鍵提供默認(rèn)值 d.get(key,defaultval) D. get ( "Newton" , "unknown" ) # = ' unknown ' try:XXX except KeyError:XXX 語(yǔ)句捕獲修復(fù)異常等 |
4 擴(kuò)展
4.1 集合set【無(wú)序】【異構(gòu)】【可變】s = set([1,2,’3’]) <=set(t|l|d)
| 差集 | ‘-’ |
| 并集 | ‘|’ |
| 交集 | ‘&’ |
4.2 文件file f = open(‘examples/data.txt’,’w’)
| open參數(shù) | open(name[, mode[, buffering]]) -> file object 文件名: 在Python中,斜杠’/’永遠(yuǎn)都是正確的,即使是在Windows環(huán)境下。所有現(xiàn)代的操作系統(tǒng)(甚至Windows!)使用Unicode編碼方式來(lái)存儲(chǔ)文件名和目錄名。 處理模式字符串: 'r', 'w' or 'a' for reading (default),writing or appending. 寫(xiě)或追加模式下若文件不存在則創(chuàng)建它。 字符串尾部加’b’可以進(jìn)行二進(jìn)制數(shù)據(jù)處理(行末轉(zhuǎn)換關(guān)閉);加‘+’同時(shí)為輸入輸出打開(kāi);加‘U’實(shí)現(xiàn)input file的universal newline support(不能與'w' or '+'同時(shí)使用)? 控制輸出緩存,0 代表無(wú)緩存(寫(xiě)入方法調(diào)用時(shí)立即傳給外部文件)0 means unbuffered, 1 means line buffered, and larger numbers specify the buffer size. | ||||||
| 文件迭代器 | 從文本文件中讀取文字行的最佳方式是根本不用讀取文件:使用迭代器逐行讀取(讓for循環(huán)在每輪自動(dòng)調(diào)用next從而前進(jìn)到下一行) for line in open('test.txt'):print line | ||||||
| 常用文件讀操作 |
返回空字符串:文件底部; 返回包含新行符的字符串:空行 | ||||||
| 常用文件寫(xiě)操作 |
寫(xiě)入方法不添加行終止符 | ||||||
| 重定向輸出流 | import sys 暫時(shí)重定向 log = open('log.txt', 'a') # 2.6 print >> sys.stderr, 'Bad'*8 | ||||||
| ? |
| ||||||
| 字節(jié)字符串 | 從文件讀取的數(shù)據(jù)回到腳本時(shí)是一個(gè)字符串 寫(xiě)文件時(shí)使用轉(zhuǎn)換工具把對(duì)象轉(zhuǎn)化為字符串(print不用) 1 eval能夠吧字符串當(dāng)做可執(zhí)行代碼 >>>eval['[1,2,3]'] [1,2,3] 2 pickle模塊處理一般對(duì)象的存儲(chǔ) >>>import pickle >>>pickle.dump(D,ofie) >>>ofile.close() >>>E = pickle.load(ifile)? 3 struct模塊處理文件中的二進(jìn)制數(shù)據(jù) |
4.3 字節(jié)Byte
4.4 布爾型bool
| 0,'',(),[],{},None | false |
| 'string',>1,<-1 | true |
4.5 其他
關(guān)于內(nèi)置數(shù)據(jù)類型,<<深入 Python 3>>?Chapter 2 內(nèi)置數(shù)據(jù)類型??Chapter 4 字符串?Chapter 11 文件講的很到位,可供拾遺。此外,映射和集合類型也講得很好。
記住,尋求幫助最好的辦法是dir(object)和help(object.method)。
?
5.補(bǔ)充介紹
集合set,十進(jìn)制數(shù)decimal,布爾值bool,占位符None
5.1集合set
set(集合)是非常有用的數(shù)據(jù)類型,可以用來(lái)處理集合類型的數(shù)據(jù)。最開(kāi)始在Python 2.3引入,從Python 2.4開(kāi)始變?yōu)閮?nèi)置類型(不需導(dǎo)入模塊)。
什么是集合?無(wú)序、唯一。如果你想要檢測(cè)一個(gè)值是否在集合中,sets在這一點(diǎn)非常的高效,比list快多了。
和之前所見(jiàn)的數(shù)據(jù)類型不一樣(和file一樣),沒(méi)有特定的常量語(yǔ)法創(chuàng)建set對(duì)象,需要使用set的構(gòu)造函數(shù),生成一個(gè)set可以從序列(string、list、tuple)甚至映射(dictionary)直接生成。
set支持一般的數(shù)學(xué)集合操作,處理較大的數(shù)據(jù)集合時(shí)是很方便的。
>>>X = set("spam") #make 2 sets out of sequences >>>Y = set(['h','a']) ? >>>Y.add('m') #元素唯一性 >>>Y.add('m') >>>X,Y (set(['a','p','s','m']),set(['h','a','m'])) ? >>>X & Y #Intersection 并集 set(['a','m']) ? >>>X | Y #Union 交集 set(['a','p','s','h','m']) ? >>>X - Y #Difference 差集 set(['p','s'])如果直接使用dictionary構(gòu)造,則會(huì)取出鍵值作為集合的元素,如果想將字典的值生成集合怎么辦呢?
>>> a = {3:'c',2:'b',1:'a'} >>> print a {1: 'a', 2: 'b', 3: 'c'} >>> print sorted(a) [1, 2, 3] ? >>> b = set(a) >>> print b set([1, 2, 3]) >>> print sorted(b) [1, 2, 3] ? >>> c = set(a.values()) >>> print c set(['a', 'c', 'b']) >>> print sorted(c) ['a', 'b', 'c']?
5.2 布爾型bool
Python2.3引入了明確的布爾數(shù)據(jù)類型bool,其值為T(mén)rue和False,而且True和False是預(yù)先定義的內(nèi)置變量名。在內(nèi)部,內(nèi)置變量名True和False是bool的實(shí)例,實(shí)際上僅僅是內(nèi)置的int的子類。
True和False的行為和整數(shù)1和0是一樣的,除了他們有特定的邏輯打印形式(bool重新定義了str和repr的字符串格式),也就是說(shuō),True僅僅是定制了顯示格式的整數(shù)1,在Python中True+3=4!
?
?
5.3 占位符None
Python長(zhǎng)期以為一直支持特殊的占位符對(duì)象None:
>>> X = None #None placeholder >>> X >>> print X None ? >>> L = [None]*10 >>> L [None, None, None, None, None, None, None, None, None, None] ? >>> type(L) #Types <type 'list'> >>> type(type(L)) #Even types are objects <type 'type'>?
5.4 十進(jìn)制數(shù)decimal(固定精度浮點(diǎn)數(shù))
首先需要
>>> import decimal?
和普通浮點(diǎn)數(shù)的區(qū)別:
? >>> d = 3.141 >>> d + 1 4.141 >>> d + 1.111111 4.252111 >>> d + 1.1111111 4.2521111000000005 ? >>> d = decimal.Decimal('3.141') >>> d + 1 Decimal('4.141') >>> d + 1.111111 Traceback (most recent call last): File "<console>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'Decimal' and 'float' >>> d + decimal.Decimal('1.1111111') Decimal('4.2521111')更多數(shù)據(jù)結(jié)構(gòu),請(qǐng)查閱官方文檔
http://docs.python.org/2/tutorial/datastructures.html
其他的Python要點(diǎn)
?
| 性能優(yōu)化 | Python中一個(gè)主要的原則是:首先為了簡(jiǎn)單和可讀性去編寫(xiě)代碼,在程序運(yùn)行后,并證明了確實(shí)有必要考慮性能后,再考慮該問(wèn)題(time,timeit,profile模塊)。更多情況是代碼本身就已經(jīng)足夠快了。 |
| 面向?qū)ο?/p> | 基本概念一樣,this由代替self, 而且這個(gè)名字不一定要寫(xiě)成self,任何名字都可以,這也帶來(lái)了一個(gè)缺點(diǎn),你必須在形參里面指定,調(diào)用函數(shù)時(shí)不用傳遞該參數(shù)。 |
| 存儲(chǔ)器 | cPickle和pickle是叫做存儲(chǔ)器的重要模塊,可以非常方便地將一個(gè)對(duì)象存儲(chǔ)到一個(gè)文件,然后再取存儲(chǔ)從文件中取出來(lái)pickle.dump(object, file object),構(gòu)造對(duì)象時(shí),pickle.load(file object) [儲(chǔ)存、取存儲(chǔ)] |
| 異常 | raise,except,try...finally |
| 系統(tǒng)庫(kù) | sys模塊和os模塊有很多強(qiáng)大功能,比如說(shuō)os.system(命令)可用于執(zhí)行shell命令 |
| lambda形式 | lambda語(yǔ)句被用來(lái)創(chuàng)建新的函數(shù)對(duì)象,并且在運(yùn)行時(shí)返回它們。lambda語(yǔ)句用>來(lái)創(chuàng)建函數(shù)對(duì)象。本質(zhì)上,lambda需要一個(gè)參數(shù),后面僅跟單個(gè)表達(dá)式作為函數(shù)體,而表達(dá)式的值被這個(gè)新建的函數(shù)返回。 注意,即便是print語(yǔ)句也不能用在lambda形式中,只能使用表達(dá)式。 |
?
Python語(yǔ)句
?
?
?
?
?
?
?
?
?
?
?
random模塊高級(jí)用法:
| distributions on the real line: | uniform(self, a, b) |????? Get a random number in the range [a, b) or [a, b]. triangular(self, low=0.0, high=1.0, mode=None) gauss(self, mu, sigma) normalvariate(self, mu, sigma) lognormvariate(self, mu, sigma) expovariate(self, lambd) gammavariate(self, alpha, beta) betavariate(self, alpha, beta) paretovariate(self, alpha) weibullvariate(self, alpha, beta) vonmisesvariate(self, mu, kappa) |
| internal state | seed(self, a=None) setstate(self, state) getstate(self) jumpahead(self, n) |
from: http://www.cnblogs.com/wei-li/archive/2012/04/18/2454647.html 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的Python变量和对象类型速记手册的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: The python debugger调
- 下一篇: 简明python教程 --C++程序员的