數(shù)值類型
整數(shù)類型 int
Python 3 之后归形,整數(shù)類型為 int 蜘醋,不在區(qū)分整型與長(zhǎng)整型,(Python2.x 中分別是 int 和 long 類型)整數(shù)的長(zhǎng)度不在受限。我覺(jué)得這個(gè)特性實(shí)在方便抛猖,少去了其它語(yǔ)言處理溢出的步驟,記得以前學(xué)C語(yǔ)言的時(shí)候做ACM題的大數(shù)相乘廢了不少力鼻听。
# 不存在溢出問(wèn)題财著,舒服
>>> 55555555555555555555555 * 66666666666666666666666666666666666666
3703703703703703703703666666666666666629629629629629629629630L
#直接寫(xiě)下數(shù)值,默認(rèn)十進(jìn)制
>>> 23
23
#前面加0b撑碴,二進(jìn)制
>>> 0b101010
42
#前面加0o撑教,八進(jìn)制
>>> 0o15
13
#前面加0x,十六進(jìn)制
>>> 0x2F
47
>>>
如果想將字符串醉拓、浮點(diǎn)數(shù)伟姐、布爾值等類型裝換為整數(shù)則使用強(qiáng)制轉(zhuǎn)換函數(shù) int() ,使用函數(shù) oct()、hex() 將十進(jìn)制返回對(duì)應(yīng)進(jìn)制的字符串亿卤。
浮點(diǎn)類型 float
想知道某個(gè)數(shù)據(jù)的類型使用 type() 函數(shù):
>>> type(3.14159)
<type 'float'>
#可以用科學(xué)計(jì)數(shù)法表示浮點(diǎn)類型
>>> 1.234e-10
1.234e-10
>>> type(1.234e-10)
<type 'float'>
如果用個(gè)浮點(diǎn)字符串如'1.2345'愤兵,想要將其轉(zhuǎn)換為int類型,不能直接用int()函數(shù)排吴,要先用float()函數(shù)轉(zhuǎn)換為float秆乳,再轉(zhuǎn)為int:
>>> int(1.2345)
1
# 這樣會(huì)報(bào)錯(cuò)
>>> int('1.2345')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.2345'
>>> int(float('1.2345'))
1
布爾類型
布爾類型只有兩個(gè)值:True和False. 0為False,非0值都為True钻哩。將None屹堰、False、0街氢、0.0扯键、0j、''珊肃、()荣刑、[]、{} 等傳給bool(),都會(huì)返回False近范,其他的為True嘶摊。
復(fù)數(shù)
Python支持復(fù)數(shù)直接表示法,使用A+Bj的形式评矩,是complex類的實(shí)例叶堆,可以直接運(yùn)算:
>>> 1 + 2j + 2 + 3j
(3+5j)
>>> 10 + 3j + 2 + 3j
(12+6j)
>>>
字符串類型
Python中使用' '或" "來(lái)括住字符標(biāo)明是一個(gè)字符串:
>>> 'study python'
'study python'
>>> 'study "python"'
'study "python"'
# Python 自動(dòng)將'\'視為'\\'
>>> 'c:\windows'
'c:\\windows'
''為轉(zhuǎn)義字符,需要注意特殊情況(這里\t相當(dāng)與Tab):
>>> print('c:\tindows')
c: indows
>>> print('c:\\tindows')
c:\tindows
>>> print('c:\\\tindows')
c:\ indows
>>> print('c:\\\\tindows')
c:\\tindows
可以看到這種寫(xiě)法有些不便斥杜,可以使用原生字符串Raw_String來(lái)表示虱颗,在字符串面前加上 r 就行:
>>> print(r'c:\\tindows')
c:\\tindows
想讓字符串包含換行縮進(jìn)等格式時(shí)沥匈,使用三重引號(hào)'''或""":
>>> '''This is a
... examplr'''
'This is a\nexamplr'
>>> print('''This is a
... example''')
This is a
example
可以使用str()類將數(shù)值轉(zhuǎn)換為字符串,使用ord()函數(shù)可以返回一個(gè)字符的Unicode編碼忘渔,使用chr()函數(shù)則可以將Unicode編碼轉(zhuǎn)成一個(gè)字符:
>>> str(21.321)
'21.321'
>>> ord('一')
19968
>>> chr(19968)
'一'
格式化字符串
當(dāng)指定多個(gè)字符串給print()函數(shù)時(shí)高帖,默認(rèn)的分隔符是空格,如果想要指定其他的字符畦粮,可以多指定一個(gè)sep參數(shù):
>>> name = 'JYH'
>>> print('hello', name)
hello JYH
>>> print('hello', name, sep = ', ')
hello, JYH
>>> print('hello', name, end = '')
hello JYH>>>
print()函數(shù)中默認(rèn)輸出換行散址,它有一個(gè)參數(shù)end,在指定的字符串輸出后宣赔,end指定的字符才會(huì)被輸出预麸,可以用這個(gè)參數(shù)來(lái)控制是否換行。
可以像C語(yǔ)言一樣的在print中用'%'來(lái)控制格式儒将,直接看案例:
>>> '你好 %s' % 'JYH'
'你好 JYH'
>>> '%d + %f = %.3f' % (2, 3.14159, 2 + 3.14159)
'2 + 3.141590 = 5.142'
>>> '%5d + %5f = %2.3f' % (2, 3.14159, 2 + 3.14159)
' 2 + 3.141590 = 5.142'
舊的格式化麻煩且可讀性不是很好吏祸,好在后面有了新的格式化方法:
>>> '{} / {} = {}'.format(5, 7, 5/7)
'5 / 7 = 0.7142857142857143'
>>> '{1} / {0} = {2}'.format(7, 5, 5/7)
'5 / 7 = 0.7142857142857143'
>>> '{a} / = {result}'.format(a = 5, b = 7, result = 5/7)
'5 / 7 = 0.7142857142857143'
占位符變成了{(lán)}钩蚊,可以用索引或者名稱來(lái)指定參數(shù)贡翘,也可以指定數(shù)字的寬度與小數(shù)點(diǎn)位數(shù)以及補(bǔ)齊字符:
>>> '{1:d} / {0:d} = {2:.2f}'.format(7, 5, 5/7)
'5 / 7 = 0.71'
>>> '{1:5d} / {0:10d} = {2:10.2f}'.format(7, 5, 5/7)
' 5 / 7 = 0.71'
#"<"用來(lái)左對(duì)齊,"^"前面的字符為補(bǔ)齊字符
>>> '{1:>5d} / {0:<10d} = {2:0^10.2f}'.format(7, 5, 5/7)
' 5 / 7 = 0000.71000'
format()函數(shù)用很多用法砰逻,可以像使用索引一樣獲取列表的值鸣驱、使用鍵名稱獲取字典的值還有引用模塊中的名稱以及格式化單個(gè)值:
>>> array = ['a', 'b', 'c']
>>> 'array has {a[0]}, {a[1]}, {a[2]}'.format(a = array)
'array has a, b, c'
>>> user = {'name' : 'JYH', 'eamil' : '123@qq.com'}
>>> 'The name of user is {user[name]}'.format(user = user)
'The name of user is JYH'
>>> import sys
>>> 'My system is {mac.platform}'.format(mac = sys)
'My system is darwin'
>>> format(1.234, '0^10.2f')
'0001.23000'
可以用len()函數(shù)獲取字符串的長(zhǎng)度,實(shí)用encode()方法可將字符串轉(zhuǎn)為指定編碼诱渤,用decode()方法解碼丐巫,使用 in 來(lái)檢測(cè)某字符是否在字符串中:
>>> str = '字符串'
>>> len(str)
3
>>> str.encode('UTF-8')
b'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
>>> str.encode('UTF-8').decode('UTF-8')
'字符串'
>>> '符' in str
True
無(wú)論是Python2 還是 Python3 字符串一旦創(chuàng)建都是不可便變動(dòng)的 immutable ,無(wú)法修改它的內(nèi)容勺美,不像OC還有mutableString递胧。
群集類型
列表 list
list,就相當(dāng)于數(shù)組赡茸,有序缎脾,內(nèi)容長(zhǎng)度可變動(dòng),使用[]表示占卧,每個(gè)元素用逗號(hào)','分開(kāi)遗菠,下面展示了列表的一些常用方法:
>>> list = [1, 2, 3, 4]
# remove() 刪除指定的元素值, del 刪除索引位置的值
>>> list.remove(2)
>>> list
[1, 3, 4]
>>> del list[0]
>>> list
[3, 4]
>>> list.extend([1 , 2])
>>> list
[3, 4, 1, 2]
>>> list.pop()
2
>>> list
[3, 4, 1]
>>> list.append(2)
>>> list
[3, 4, 1, 2]
>>> list.sort()
>>> list
[1, 2, 3, 4]
>>> list.reverse()
>>> list
[4, 3, 2, 1]
>>> 2 in list
True
可以從可迭代對(duì)象(如字符串华蜒、集合辙纬、元組)用 list() 直接創(chuàng)建一個(gè)列表:
>>> list('abcde')
['a', 'b', 'c', 'd', 'e']
>>> list({'a', 'b', 'c', 'c', 'b'})
['a', 'b', 'c']
>>> list((1,2,3,4))
[1, 2, 3, 4]
集合 set
集合的內(nèi)容無(wú)序且不重復(fù),使用{}包裹元素叭喜,使用逗號(hào)','分割贺拣,如果有重復(fù)的元素會(huì)被自動(dòng)剔除。創(chuàng)建空集合必須使用set();,不能使用{},這會(huì)創(chuàng)建一個(gè)空字典:
>>> shop = set()
>>> shop.add('water')
>>> shop.add('cake')
>>> shop
{'water', 'cake'}
>>> shop.remove('water')
>>> 'water' in shop
False
由于集合中的元素不能重復(fù)譬涡,所以并非所有元素都能加入集合中闪幽,只有可哈希hashable的對(duì)象能放進(jìn)去,至于什么是可哈衔性龋看這里可哈希(hashable)與不可哈希(unhashable)盯腌,還可以從其他可迭代的對(duì)象中創(chuàng)建集合:
>>> set('fsafa')
{'s', 'a', 'f'}
>>> set([1,2,3,4])
{1, 2, 3, 4}
>>> set((1,2,3,4))
{1, 2, 3, 4}
字典 dict
字典用來(lái)存儲(chǔ)鍵值對(duì),創(chuàng)建字典時(shí)陨瘩,鍵不能重復(fù)腕够,必須是 hashable :
>>> user = {'name' : 'JYH', 'pwd' : 1234}
>>> user['pwd']
1234
>>> user['emial'] = '1234@qq.com'
>>> user
{'name': 'JYH', 'pwd': 1234, 'emial': '1234@qq.com'}
#其他創(chuàng)建字典的方式
>>> user2 = dict(name = 'HJY', pwd = 5678, email = '5678@qq.com')
>>> user2
{'name': 'HJY', 'pwd': 5678, 'email': '5678@qq.com'}
>>> user3 = dict([('name', '三十六'), ('pwd', 123321)])
>>> user3
{'name': '三十六', 'pwd': 123321}
>>> user2.fromkeys(['name', 'pwd'], 'hahaha')
{'name': 'hahaha', 'pwd': 'hahaha'}
常用方法
#方法 #描述
-------------------------------------------------------------------------------------------------
D.clear() #移除D中的所有項(xiàng)
D.copy() #返回D的副本
D.fromkeys(seq[],val]) #返回從seq中獲得的鍵和被設(shè)置為val的值的字典∈霸停可做類方法調(diào)用
D.get(key[],default]) #如果D[key]存在燕少,將其返回卡者;否則返回給定的默認(rèn)值None
D.has_key(key) #檢查D是否有給定鍵key
D.items() #返回表示D項(xiàng)的(鍵蒿囤,值)對(duì)列表
D.iteritems() #從D.items()返回的(鍵,值)對(duì)中返回一個(gè)可迭代的對(duì)象
D.iterkeys() #從D的鍵中返回一個(gè)可迭代對(duì)象
D.itervalues() #從D的值中返回一個(gè)可迭代對(duì)象
D.keys() #返回D鍵的列表
D.pop(key[],d]) #移除并且返回對(duì)應(yīng)給定鍵key或給定的默認(rèn)值D的值
D.popitem() #從D中移除任意一項(xiàng)崇决,并將其作為(鍵材诽,值)對(duì)返回
D.setdefault(key[],default]) #如果D[key]存在則將其返回;否則返回默認(rèn)值None
D.update(other) #將other中的每一項(xiàng)加入到D中恒傻。
D.values() #返回D中值的列表
元組 tuple
元組跟列表一樣脸侥,都是有序結(jié)構(gòu),但不同的是盈厘,元組一旦創(chuàng)建之后無(wú)法變動(dòng)睁枕,所以它是hashable 。創(chuàng)建元組只需要在某個(gè)值后面加一個(gè)逗號(hào)','即可:
>>> 1,
(1,)
>>> 1, 2, 3,
(1, 2, 3)
>>> 1, 'a', True
(1, 'a', True)
>>> (1, 2, 3)
(1, 2, 3)
創(chuàng)建元組時(shí)沸手,最后一個(gè)逗號(hào)可以省略(只包含一個(gè)元素的除外)外遇,通常加上()更直觀的看出這是一個(gè)元組。
元組的作用:
可以返回一組相關(guān)的值契吉,不用自己定義類型跳仿;可以當(dāng)做不能修改的參數(shù)傳遞給函數(shù),因?yàn)樵M無(wú)法修改捐晶,如果函數(shù)中試圖修改數(shù)據(jù)菲语,那么就會(huì)報(bào)錯(cuò),使得程序更加嚴(yán)謹(jǐn)惑灵,而且元組所占用的內(nèi)存較小山上。
元組其他用法:
#拆解(unpack)
>>> a = (1, 'a', True)
>>> num, str, bool = a
>>> num
1
>>> bool
True
#python3 新特性
>>> a, *b , c = (1,2,3,4,5)
>>> a
1
>>> b
[2, 3, 4]
>>> c
5
#交換兩個(gè)變量的值,不像其它語(yǔ)言需要中間變量
>>> a = 1
>>> b = 2
>>> a, b = b, a
>>> a
2
>>> b
1