日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python变量和对象类型速记手册

發(fā)布時(shí)間:2025/3/21 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python变量和对象类型速记手册 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

變量和對(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í)候特別有用。


>>> def powersum(power, *args):
...?????'''Return the sum of each argument raised to specified power.'''
...?????total = 0
...?????for i in args:
...??????????total += pow(i, power)
...?????return total
...
>>> powersum(2, 3, 4)
25

>>> powersum(2, 10)
100

?

引用傳遞

在 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 = userName? #指向新創(chuàng)建的另一個(gè)字符串對(duì)象

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)
0.8759095262051569

>>> 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
---------
pick random element
random sampling without replacement

generate random permutation

>>> random.choice([0,1,2,3]) #a random element
2

>>> random.sample(xrange(10000000), 3) #unique random elements
[9435040, 5756107, 8741537]

>>> 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)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

同時(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]]
>>> column = [row[1] for row in M if row[1]%2 == 0]
>>> column
[2, 8]
>>> diag = [M[i][i] for i in [0,1,2]]
>>> diag
[1, 5, 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')
set(['a', 'c', 'b', 'e', 'd'])

‘\0’不會(huì)中斷字符串

>>> s = "a\0b\tc\c"?
>>> s
'a\x00b\tc\\c'
>>> len(s)
7

raw字符串 r’\temp\spam’
類型方法 find(s),isdigit(),isalpha()
upper(),lower(),replace(s0,s1),split(‘’),rstrip()
不可變:模擬改變?cè)M

1 合并、分片、索引?
where = S.find('SPAM')
S = S[:where] + 'EGGS' +S[(where+4):]
2 字符串方法?
S = S.replace('pl','pamal') #replace all
S = S.replace('pl','pamal',1) #replace once
role,words = line.split(':',1) #split([sep[,maxsplit]]) ->list of strings

3 轉(zhuǎn)化為可變對(duì)象
L = list(S)
L[3] = 'x'
S = ''.jion(L)
line = 'bob,hacker,40\n'
line.rstrip()
line.split(',')
[bob,hacker,40]

字符串格式化 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
>>> match = re.match('[/]usr/(.*)/(.*)','/usr/home/jack')
>>> type(match)
<type '_sre.SRE_Match'>
>>> match.groups()
('home', 'jack')

對(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'
TypeError: 'tuple' object does not support item assignment

>>> 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í)使用)?
buffering參數(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
常用文件讀操作
aString = input.read()
aString = input.read(N)
aString = input.readline()
讀取[整個(gè)文件]到一個(gè)字符串
讀取[之后N個(gè)字節(jié)]到一個(gè)字符串
讀取[下一行(包括行末標(biāo)志符)]到一個(gè)字符串
aList = input .readlines()
aList = input.xreadlines()
讀取[整個(gè)文件]到{字符串列表}

返回空字符串:文件底部; 返回包含新行符的字符串:空行
for line in open('test.txt').readlines():print line #比文件迭代器麻煩
while ... :?? #效率比f(wàn)or差
?? line? = file.readline()
?? if not line:break?

常用文件寫(xiě)操作
output.write(aString) 寫(xiě)入{字節(jié)字符串}到文件,并不會(huì)添加行終止符
output.writelines(aList) 寫(xiě)入{列表內(nèi)所有字符串}到文件

寫(xiě)入方法不添加行終止符

重定向輸出流

import sys
sys.stdout = open('log.txt', 'a') # Redirects prints to a file
...
print(x, y, x) # Shows up in log.txt

暫時(shí)重定向

log = open('log.txt', 'a') # 2.6
print >> log, x, y, z # Print to a file-like object
print a, b, c # Print to original stdout

print >> sys.stderr, 'Bad'*8

?
output.close() 手動(dòng)關(guān)閉(當(dāng)文件收集完成時(shí)會(huì)替你關(guān)閉文件)
output.flush() 把輸出緩沖區(qū)刷到硬盤(pán)上,但不關(guān)閉文件
anyFile.seek(N) 修改文件位置到偏移量N處(以便進(jìn)行下一個(gè)操作)
字節(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ù)。
構(gòu)造函數(shù):__init__(self, ......)
析構(gòu)函數(shù):__del__ 對(duì)象滅亡時(shí)或者調(diào)用del時(shí)被調(diào)用
Python中所有的類成員(包括數(shù)據(jù)成員)都是公共的 ,所有的方法都是有效的 。只有一個(gè)例外:如果你使用的數(shù)據(jù)成員名稱以 雙下劃線前綴 比如__privatevar,Python的名稱管理體系會(huì)有效地把它作為私有變量。

存儲(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
?????? triangular
?????? normal (Gaussian)
?????? lognormal
?????? negative exponential
?????? gamma
?????? beta
?????? pareto
?????? Weibull
distributions on the circle (angles 0 to 2pi)
------------------------?????? circular uniform
?????? von Mises

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)
|????? Triangular distribution.

gauss(self, mu, sigma)
|????? Gaussian distribution.

normalvariate(self, mu, sigma)
|????? Normal distribution.

lognormvariate(self, mu, sigma)
|????? Log normal distribution.

expovariate(self, lambd)
|????? Exponential distribution.

gammavariate(self, alpha, beta)
|????? Gamma distribution.? Not the gamma function!

betavariate(self, alpha, beta)
|????? Beta distribution.

paretovariate(self, alpha)
|????? Pareto distribution.?

weibullvariate(self, alpha, beta)
|????? Weibull distribution.

vonmisesvariate(self, mu, kappa)
|????? Circular data distribution.

internal state

seed(self, a=None)
|????? Initialize internal state from hashable object.

setstate(self, state)
|????? Restore internal state from object returned by getstate().

getstate(self)
|????? Return internal state; can be passed to setstate() later.

jumpahead(self, n)
|????? Change the internal state to one that is likely far away
|????? from the current state.? This method will not be in Py3.x,
|????? so it is better to simply reseed.



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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。