?
Python語(yǔ)言中姿搜,數(shù)據(jù)以對(duì)象的形式出現(xiàn)寡润,無論是Python提供的內(nèi)置對(duì)象,還是使用Python語(yǔ)言創(chuàng)建的對(duì)象舅柜。
程序-〉模塊-〉語(yǔ)句-〉表達(dá)式-〉處理對(duì)象
為何區(qū)分對(duì)象類型
1 不同類型對(duì)象運(yùn)算規(guī)則不同
2 不同類型對(duì)象在計(jì)算機(jī)內(nèi)表示方式不同
3 為何區(qū)分整數(shù)與浮點(diǎn)數(shù)
?浮點(diǎn)數(shù)表達(dá)能力更強(qiáng)
?浮點(diǎn)數(shù)有精度損失
?CPU有專門的浮點(diǎn)運(yùn)算部件
>>> print(3.3==1.1*3)
False
內(nèi)置對(duì)象一覽
對(duì)象類型例子
數(shù)字123梭纹,12.5,5+10j
字符串'hello world!'致份,"Python is best."
元組(5,'spam',12,'A')
列表[1,2,[3,4,'haha'],5]
字典{'abc':123,'efg':456,'qwer':'1234'}
集合{1,2,3,4,5} 变抽,set('hello world!')
文件myfile = open('test.py','r')
其他None,布爾型
數(shù)字
int(整型)
在32位機(jī)器上知举,整數(shù)的位數(shù)為32位瞬沦,取值范圍為-2**31~2**31-1,即-2147483648~2147483647
在64位系統(tǒng)上雇锡,整數(shù)的位數(shù)為64位逛钻,取值范圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(長(zhǎng)整型)
跟C語(yǔ)言不同锰提,Python的長(zhǎng)整數(shù)沒有指定位寬曙痘,即:Python沒有限制長(zhǎng)整數(shù)數(shù)值的大小,但實(shí)際上由于機(jī)器內(nèi)存有限立肘,我們使用的長(zhǎng)整數(shù)數(shù)值不可能無限大边坤。
注意,自從Python2.2起谅年,如果整數(shù)發(fā)生溢出茧痒,Python會(huì)自動(dòng)將整數(shù)數(shù)據(jù)轉(zhuǎn)換為長(zhǎng)整數(shù),所以如今在長(zhǎng)整數(shù)數(shù)據(jù)后面不加字母L也不會(huì)導(dǎo)致嚴(yán)重后果了融蹂。
float(浮點(diǎn)型)
浮點(diǎn)數(shù)用來處理實(shí)數(shù)旺订,即帶有小數(shù)的數(shù)字弄企。類似于C語(yǔ)言中的double類型,占8個(gè)字節(jié)(64位)区拳,其中52位表示底拘领,11位表示指數(shù),剩下的一位表示符號(hào)樱调。
complex(復(fù)數(shù))
復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分組成约素,一般形式為x+yj,其中的x是復(fù)數(shù)的實(shí)數(shù)部分笆凌,y是復(fù)數(shù)的虛數(shù)部分圣猎,這里的x和y都是實(shí)數(shù)。
字符串
字符串(String)是一個(gè)字符的序列菩颖,用于記錄文本信息样漆。序列中的元素包含一個(gè)從左到右的順序,可以根據(jù)它們的相對(duì)位置進(jìn)行存儲(chǔ)和讀取晦闰,其他類型的序列包括列表和元組放祟。
注:不可變序列只能通過位置讀取,不能存儲(chǔ)(字符串和元組是不可變序列)呻右。
三種定義方式:
單引號(hào)括起來
s = 'hello world'
雙引號(hào)括起來
s = "hello world"
三引號(hào)括起來("""或''')
s = """this is a test
hello world."""
用轉(zhuǎn)義序列代表特殊字符
\\?--反斜線(保留\)
\'?--單引號(hào)
\"?--雙引號(hào)
\n? --換行
\t? --水平制表符
\v?--垂直制表符
\r?--回車
抑制轉(zhuǎn)義
>>>s = r'D:\tmp\a.txt'
>>>s
'D:\\tmp\\a.txt'
基本運(yùn)算
長(zhǎng)度(len()函數(shù))
拼接(+)
重復(fù)(*)
成員運(yùn)算符(in)
示例:
計(jì)算字符串中元音字母數(shù)目
def vowels_count(s):
???????? ret= 0
???????? foritem in s:
?????????????????? ifitem in 'aeiouAEIOU':
??????????????????????????? ret+=1
???????? returnret
索引與分片
Python語(yǔ)言中索引是按照最前面的偏移量進(jìn)行編碼跪妥,索引的起始位置為0。
例如:
>>>s = 'Hello'
>>>s[0]
'H'
>>>s[2]
'l'
Python語(yǔ)言支持反向索引声滥,從最后一個(gè)開始眉撵,其索引值是-1
>>>s[-1]
'o'
>>>s[-2]
'l'
分片操作,從序列對(duì)象中提取一部分落塑。一般形式為X[I,J]纽疟,表示從序列對(duì)象X中提取從偏移為I,直到但不包括J的內(nèi)容。
例如:
>>>s[1:3]
'el'
>>>s[1:-1]
ell
分片操作中憾赁,左邊界默認(rèn)為0污朽,右邊界默認(rèn)為序列長(zhǎng)度,這樣可以在分片時(shí)省略左右邊界龙考。
例如:
>>>s[:-1]
'Hell'
>>>s[2:]
'llo'
>>>s[:]
'Hello'
擴(kuò)展分片蟆肆,可選的第三個(gè)索引,用于步進(jìn)晦款。形式X[I,J,K]炎功,表示對(duì)序列X從偏移I,直到偏移J-1缓溅,每隔K個(gè)元素提取一個(gè)對(duì)象蛇损。K默認(rèn)值為1。
例如:
>>>s='abcdefghijklmnopqrstuvwxyz'
>>>s[1:10:3]
'beh'
>>>s[::4]
'aeimquy'
>>>s[::-1]
'zyxwvutsrqponmlkjihgfedcba'
>>>s[5:1:-2]
'fd'
字符串方法
replace(old,new,count=-1) 替換子串
find(sub) 尋找子串,找到返回子串位置淤齐,否則返回-1
split(sep) 字符串切分束世,根據(jù)sep切分為字符串?dāng)?shù)組
更多方法:
>>> dir(str)
['__add__', '__class__', '__contains__',
'__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__',
'__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__',
'__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__',
'__reduce__','__reduce_ex__',
'__repr__', '__rmod__', '__rmul__',
'__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'capitalize',
'casefold', 'center', 'count', 'encode', 'endswith',
'expandtabs', 'find', 'format',
'format_map', 'index', 'isalnum', 'isalpha',
'isascii', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable',
'isspace', 'istitle', 'isupper', 'join',
'ljust', 'lower', 'lstrip', 'maketrans', 'partition',
'replace', 'rfind', 'rindex', 'rjust',
'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines',
'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
字符串比較
?按順序依次比較每個(gè)位置上的字符,如果相同就比較下一個(gè)床玻,如果不同大小關(guān)系就由這兩個(gè)字符的大小關(guān)系決定。
字符串格式化format方法
{}的格式 {field name,align
width.precision type}
print("PI is {}".format(math.pi))
print("PI is
{:4.2f}".format(math.pi))
列表與元組
內(nèi)建數(shù)據(jù)結(jié)構(gòu)沉帮,用來存儲(chǔ)一系列元素锈死,列表與元組的區(qū)別是,元組是不可變對(duì)象穆壕,不能修改待牵,列表可以修改。
元組:
t = (1,2,3,4,5)
列表
l = [1,2,3,4,5]
列表和元組與字符串一樣喇勋,都是有序序列缨该,所以列表和元組與字符串有很多相同點(diǎn):
1 索引運(yùn)算[]
2 切片[:]
3 拼接和重復(fù) + *
4 成員運(yùn)算 in
5 長(zhǎng)度 len
6 循環(huán)迭代 for
與字符串只能包含字符不同,列表和元組可以包含多種類型的對(duì)象川背。
列表的方法
append() #追加
extend() #擴(kuò)充
pop() #刪除
remove() #刪除
sort() #排序
reverse() #逆序
列表賦值
a = [1,2,3,4]
b = a
b[1] = 100
b = [:]
b[1] = 100
嵌套列表
x = [[1,2,3,[4,5,6],[7,8,9]]]
len(x) = ?
len(x[1]) = ?
列表解析
列表解析:由原列表創(chuàng)建新列表的簡(jiǎn)單方法贰拿。列表解析語(yǔ)法是從集合理論表示法中的一種結(jié)構(gòu)衍生出來的,也就是對(duì)集合中的每個(gè)元素應(yīng)用某一種運(yùn)算熄云。
?[表達(dá)式 for 變量 in 列表 if 條件]
例如生成x平方的序列:
?ist= []
?forx in range(1,10)
???????? ist.append(x**2)
?print(ist)
列表解析:
?ist= [x**2 for x in range(1,10)]
使用列表解析求輸入數(shù)字x的因數(shù)和
?例如輸入6 膨更,因數(shù)和為1+2+3+6 = 12
?sum([i for i in range(1,x+1) if x%i == 0])
字典與集合
字典:一系列“鍵-值(key-value)”對(duì)
通過“鍵”查找對(duì)應(yīng)的“值”
?電話本,字典
?java中的Map
(HashTable,HashMap)
創(chuàng)建字典
?使用{}創(chuàng)建字典
?使用:指明鍵:值對(duì)
?myDict = {'小李':87977111,'李明':13598881112,'小丁':98761221}
?字典中的鍵必須是不可變的且不可重復(fù)缴允,值可以是任意類型荚守。
訪問字典
?使用[]運(yùn)算符,鍵作為索引
?print(myDict['小李'])
?增加新的鍵值對(duì):
?myDict['小王']=17621231232
字典運(yùn)算符和方法
?len
?keyin myDict
?forkey in myDict
myDict.items() #全部鍵值對(duì)
myDict.keys() #全部鍵
myDict.values() #全部值
myDict.clean() #清空字典
示例:
計(jì)算一個(gè)字符串中每個(gè)字母出現(xiàn)的次數(shù)
count = {}
for i in 'hello world':
???????? ifi in count:
?????????????????? count[i]+= 1
???????? else:
?????????????????? count[i]= 1
集合(Set)
無序不重復(fù)元素集
和字典類似练般,但是只有“鍵”沒有“值”
創(chuàng)建
?x =set()
?x ={key1,key2,...}
添加和刪除
?x.add()
?x.remove()
集合的運(yùn)算符
-? 差集
& 交集
| 并集
!= 不等于
== 等于
in 成員
for key in set 枚舉
文件
計(jì)算機(jī)中由操作系統(tǒng)管理的具有名字的存儲(chǔ)數(shù)據(jù)的基本單元矗漾。
內(nèi)置open函數(shù)
open(file, mode='r', encoding=None)
file -- 文件名
mode --模式 r讀; w寫薄料; a追加敞贡; b 二進(jìn)制模式;t文本模式都办;+ 同時(shí)讀寫
encoding --編碼(只對(duì)文本模式有效嫡锌,默認(rèn)取系統(tǒng)編碼,可參考codesc模塊)
文件對(duì)象的方法:
file.read()?????????????????? ?????????????????? --把整個(gè)文件讀入單一字符串
file.read(N)?????? ?????????????????? --讀取N個(gè)字節(jié)到一個(gè)字符串
file.readline()????????????????????? --讀取下一行(包括換行符)
file.readlines()??????????????????? --讀取整個(gè)文件到字符串列表(可迭代對(duì)象)
file.write(aString)????????????? --寫入字符串到文件
file.writelines(aList)?????????????????? --把列表內(nèi)所有字符串寫入文件
file.close()?????????????????????????? --關(guān)閉文件
file.flush()??????????????????????????? --輸出緩沖區(qū)刷新到硬盤
file.seek(N)???????????????????????? --文件指針向后跳轉(zhuǎn)到偏移量N處
注:目前的Python解釋器在回收文件對(duì)象時(shí)琳钉,會(huì)自動(dòng)關(guān)閉文件势木,這意味著并不需要總是手動(dòng)關(guān)閉文件,但這并不是語(yǔ)言定義的一部分歌懒,所以手動(dòng)調(diào)用close方法關(guān)閉文件是個(gè)好習(xí)慣啦桌。