python的組成全景:
- 程序由模塊構成
- 模塊包含語句
- 語句包含表達式
- 表達式建立并處理對象
python的內(nèi)置對象:
- 數(shù)字
- 字符串
- 列表
- 字典
- 元組
- 文件
- 集合
- 其他類型: 類型缝彬、None、布爾型
- 編程單元類型: 函數(shù)楔敌、類抡谐、模塊
- 與實現(xiàn)相關的類型: 編譯的代碼堆棧跟蹤
數(shù)字
數(shù)字包含:整數(shù)射窒、浮點數(shù)、復數(shù)暖混、十進制數(shù)战坤、帶分子和分母的有理分數(shù)以及集合
注意:python的整數(shù)類型會自動提供額外的精度
python的命令行交互方法調(diào)用的是repr莲镣,而print調(diào)用的str
字符串
字符串就是序列中的元素包含了一個從左到右的順序—序列中的元素根據(jù)它們的相對位置進行儲存和讀取福稳。從嚴格意思上來說,字符串是單個字符的字符串的序列瑞侮,其他類型的序列還包括列表和元組的圆。
序列的操作
- len()
- 切片
- S[-1] 和 S[len(s)-1] 結(jié)果相等
- S[:] 可以作為復制
不可變性
類型特定的方法
.find()
.replace()
.split()
.upper()
.isalpha()
.isupper()
.strip()
尋求幫助
- dir(s) :顯示可以調(diào)用的方法
- help(s.replace) :顯示幫助信息
列表
列表是一個任意類型的對象的位置相關的有序集合。其大小可變半火。
序列操作
L 是一個list
len()
L+L[:2]
類型特定的操作
- l.append()
- l.pop()
- l.sort()
- l.reverse()
邊界檢查
python不允許引用和賦值列表不存在的元素越妈。
嵌套
列表可以嵌套,這樣即形成了多重列表钮糖。
列表解析
- [row[1] for row in M if row[1] % 2 == 0]
列表解析的速度有優(yōu)勢
注意梅掠,將列表表達式的中括號換成括號,列表表達式將會變成一個生成器店归。
In [8]: M=[1,2,3,4,5,6,7,8,9]
In [11]: G=(row*2 for row in M)
In [12]: next(G)
解析語法同樣可以創(chuàng)建集合和字典
In [22]: M=[[1,2,3],[4,5,6],[7,8,9]]
In [23]: {sum(row) for row in M}
Out[23]: {6, 15, 24}
In [24]: {i: sum(M[i]) for i in range(3)}
Out[24]: {0: 6, 1: 15, 2: 24}
字典
字典就是一種映射阎抒,他并不是基于位置映射,而是基于key來映射
映射操作
即可以通過key來獲得字典的value
重訪嵌套
即字典可以值內(nèi)嵌套字典
鍵的排序:for循環(huán)
d 是一個字典
- d.keys()
- for key in s : 循環(huán)的是key
- d.items()
- d.values()
迭代和優(yōu)化
列表表達式就是一個迭代工具娱节。
不存在的鍵: if 測試
In [42]: 'f' in d
Out[42]: False
In [43]: if not 'f' in d:print('not in')
not in
In [46]: d['x'] if 'x' in d else 0
Out[46]: 0
In [47]: d.get('x',0)
Out[47]: 0
元組
元組是一個不可變的列表,他提供了完整的約束挠蛉。
- .index()
- .count()
文件
文件對象是python代碼對電腦上外部文件的主要接口祭示。
沒有特定的常量語法創(chuàng)建文件肄满,如果需要創(chuàng)建一個文件對象谴古,需調(diào)用內(nèi)置的open函數(shù)以字符串的形式傳遞給他它一個外部的文件名以及一個處理模式的字符串。
其他核心類型
# 例如集合
In [48]: X=set('spam')
In [49]: Y={'h','a','m'}
In [50]: X,Y
Out[50]: ({'a', 'm', 'p', 's'}, {'a', 'h', 'm'})
In [51]: X&Y
Out[51]: {'a', 'm'}
In [52]: X|Y
Out[52]: {'a', 'h', 'm', 'p', 's'}
In [53]: X-Y
Out[53]: {'p', 's'}
# 固定精度浮點數(shù)
In [54]: 1/3
Out[54]: 0.3333333333333333
In [55]: (2/3)+(1/2)
Out[55]: 1.1666666666666665
In [56]: import decimal
In [57]: d=decimal.Decimal('3.141')
In [58]: d+1
Out[58]: Decimal('4.141')
In [59]: decimal.getcontext().prec=2
In [60]: decimal.Decimal('1.00') / decimal.Decimal('3.00')
Out[60]: Decimal('0.33')
如何破壞代碼的靈活性
用戶定義的類
習題
- 什么是不可變稠歉?
即創(chuàng)建之后就不可以被改變掰担,數(shù)字、字符串和元組都屬于這個分類怒炸。
- 什么是’序列‘带饱?
即對位置排序的對象和集合。字符串阅羹、列表和元組都在這個分類勺疼,他們有共同的操作是索引、合并和切片捏鱼。
- 什么是’映射‘执庐?
即將鍵和相關值相互關聯(lián)映射的對象。字典屬于此類导梆。
- 什么是多態(tài)轨淌?
多態(tài)意味著一個操作符的意義區(qū)別于被操作的對象。python的關鍵思想就是多態(tài)看尼,不要把代碼限制在特定的類型上递鹉,使代碼自動適用于多種類型。