Python語(yǔ)法基礎(chǔ)
數(shù)據(jù)對(duì)象和組織
- 對(duì)現(xiàn)實(shí)世界實(shí)體和概念的抽象
- 簡(jiǎn)單類(lèi)型(表示):整數(shù)—int、浮點(diǎn)數(shù)—float、復(fù)數(shù)—complex、邏輯值—bool、字符串—str
- 容器類(lèi)型(組織):列表—list、元組—tuple、集合—set、字典—dict
- 數(shù)據(jù)類(lèi)型之間大都可以轉(zhuǎn)換
賦值和控制流
- 對(duì)現(xiàn)實(shí)世界處理和過(guò)程的抽象
- 運(yùn)算語(yǔ)句(處理與暫存):表達(dá)式計(jì)算、函數(shù)調(diào)用、賦值
- 控制流語(yǔ)句(組織語(yǔ)句描述過(guò)程):循環(huán)、條件分支、順序
- 定義語(yǔ)句也用來(lái)組織語(yǔ)句,描述一個(gè)包含一系列處理過(guò)程的計(jì)算單元:函數(shù)定義、、類(lèi)定義
python數(shù)據(jù)類(lèi)型
- 整數(shù)int:不受大小限制
- 浮點(diǎn)數(shù)float:受到17位有效數(shù)字的限制
- 整數(shù)與浮點(diǎn)數(shù)有常見(jiàn)的運(yùn)算包括加(+)、減(-)、乘(*)、除(/)、整除(//)、求余(%)、指數(shù)冪等
- 一些常用數(shù)學(xué)函數(shù)在math模塊中
import math
a=math.sqrt(4)
#a=2
- 復(fù)數(shù):python內(nèi)置對(duì)復(fù)數(shù)的計(jì)算
- 支持所有常見(jiàn)的復(fù)數(shù)計(jì)算
- 對(duì)復(fù)數(shù)處理的數(shù)學(xué)函數(shù)在模塊cmath中
import cmath
a=cmath.sqrt(1+2j)
#a的值為復(fù)數(shù)1+2i開(kāi)根號(hào)
- 邏輯值(bool):邏輯值僅包括True/False兩個(gè)
- 配合if/while等語(yǔ)句做條件判斷
- 其他數(shù)據(jù)類(lèi)型可以轉(zhuǎn)化為邏輯值,如0與非0等
bool(0)#False
bool(999)#True
- 字符串:python中字符串不能修改只能產(chǎn)生新的字符串
- 用單引號(hào)和雙引號(hào)都可以表示字符串
- 多行字符串用三個(gè)連續(xù)的單引號(hào)表示
- 特殊字符用轉(zhuǎn)移符號(hào)""表示
- 字符串基本操作:連接(+)、復(fù)制(*)、長(zhǎng)度(len)、[start:end:step]用來(lái)切片(提取一部分)
- 高級(jí)操作:分割(split)、合并(join)、大小寫(xiě)相關(guān)(upper/lower/swapcase)、替換字符(replace)等等
>>> 'a b c d'.split(' ')
['a', 'b', 'c', 'd']
>>> 'abc'.upper()
'ABC'
- 列表和元組
- python中有幾種類(lèi)型是一系列元素組成的序列,以整數(shù)作為索引
- 字符串str就是一種同類(lèi)元素的序列
- 列表list和元組tuple則可以容納不同類(lèi)型的元素,構(gòu)成序列
- 元組是不能更新的序列(字符串也是)
- 列表則可以刪除、添加、替換、重排序列中的元素
image - 創(chuàng)建列表:[]或者list()
- 創(chuàng)建元組:()或者tuple()
- 用索引[n]獲取元素(列表可變)
- +:連接列表/元組
- *:復(fù)制n次,生成新列表/元組
- len():元素個(gè)數(shù)
- in:某個(gè)元素是否存在
- [start:end:step]:切片
| 方法名稱(chēng) | 使用例子 | 說(shuō)明 |
|---|---|---|
| append | alist.append(item) | 列表末尾添加元素 |
| insert | alist.insert(i,item) | 列表中i位置插入元素 |
| pop | alist,pop() | 刪除最后一個(gè)元素 |
| sort | alsit.sort() | 將表中元素排序 |
| reverse | alist.reverse() | 將列表元素反向排序 |
| del | del.alist[i] | 刪除第i個(gè)元素 |
| indx | alist.index(item) | 找到item的首次出現(xiàn)位置 |
| count | alsit.count(item) | 返回item在列表出現(xiàn)的次數(shù) |
| remove | alist.remove(item) | 將item的首次出現(xiàn)刪除 |
- 集合set:集合是不重復(fù)元素的無(wú)序組合
- 用set()創(chuàng)建空集
- 用set()從其他序列轉(zhuǎn)化生成集合
- 集合的常見(jiàn)操作:
in:判斷元素是否屬于集合、
|,union():并集、
&,intersection():交集
-,difference():差集
^,symmetric_difference():異或
<=,<,>=,>:子集,真子集,超集,真超集
- 字典dict:
- 字典是通過(guò)鍵值key來(lái)索引元素value,而不是像列表是通過(guò)連續(xù)的整數(shù)來(lái)索引
- 字典是可變類(lèi)型
- 字典中元素value沒(méi)有順序,可以是任意類(lèi)型
- 字典中的key可以是不可變類(lèi)型(數(shù)值/字符串/元組)
python變量機(jī)制
- 引用數(shù)據(jù)對(duì)象
- 賦值語(yǔ)句a=0,實(shí)際上是創(chuàng)建了名為a的變量,然后指向數(shù)據(jù)對(duì)象“0”
- 所以變量可以隨時(shí)指向任何一個(gè)數(shù)據(jù)對(duì)象,如True,1.02等(這和靜態(tài)語(yǔ)言完全不同)
- 變量的類(lèi)型隨著指向的數(shù)據(jù)對(duì)象類(lèi)型改變而改變。
- 可變類(lèi)型的變量引用情況
- 由變量的引用特性,可變類(lèi)型的變量操作需要注意的是,多個(gè)變量通過(guò)賦值引用同一個(gè)可變類(lèi)型對(duì)象時(shí),通過(guò)任何一個(gè)變量改變了可變類(lèi)型,其他變量也看到了改變
常用的連續(xù)序列生成器:range函數(shù)
- range(n):從0到n-1的序列
- range(start,end):從start到end-1的序列
- range(start,end,step)
- range函數(shù)返回range類(lèi)型的對(duì)象,可以直接當(dāng)作序列使用,也可以轉(zhuǎn)換為list或者tuple等容器類(lèi)型
建立大型數(shù)據(jù)結(jié)構(gòu)
- 嵌套列表:列表的元素是一些列表,可以通過(guò)alsit[i][j]來(lái)索引
- 字典元素可以是任意類(lèi)型,所以也可以是字典
- 字典的鍵值可以是任意不可變類(lèi)型。
>>> alist=[[1,2,3],[True,'ab']]
>>> alist[0][2]
3
>>> adict={'a':['1','2'],'b':[True,'sun']}
>>> adict['b'][0]
True
輸入和輸出:input/print函數(shù)
- input(prompt):顯示提示信息prompt,輸入內(nèi)容以字符串形式返回
- print(v1,v2,v3,...):打印各變量的值輸出,可以帶參數(shù)end(結(jié)尾)和sep(字符串之間)
- 格式化字符串:'%d %s' % (v1,v2)
運(yùn)算語(yǔ)句:表達(dá)式、函數(shù)調(diào)用、賦值
- 各類(lèi)型的數(shù)據(jù)對(duì)象,可以通過(guò)各種運(yùn)算組織成復(fù)雜的表達(dá)式
- 調(diào)用函數(shù)或?qū)ο?,也可以返回?cái)?shù)據(jù),所有可調(diào)用的事物稱(chēng)為callable(調(diào)用函數(shù)或?qū)ο?,需要在其名稱(chēng)后加圓括號(hào),有參數(shù),寫(xiě)在括號(hào)里,不加圓括號(hào)的函數(shù)或?qū)ο髢H表示自己,而不是調(diào)用)
- 將表達(dá)式或調(diào)用返回值傳遞給變量進(jìn)行引用,稱(chēng)為賦值
控制流語(yǔ)句
- 條件if
if <邏輯條件>:
<語(yǔ)句塊>
elif <邏輯條件>:#可多個(gè)elif
<語(yǔ)句塊>
else:#只能一個(gè)
<語(yǔ)句塊>
- while循環(huán)
while <邏輯條件>:
<語(yǔ)句塊>
break #跳出循環(huán)
continue #略過(guò)余下循環(huán)語(yǔ)句
<語(yǔ)句塊>
else: #條件不滿(mǎn)足推出循環(huán),執(zhí)行下面代碼
<語(yǔ)句塊>
- for循環(huán)
for <變量> in <可迭代對(duì)象>:
<語(yǔ)句塊>
break #跳出循環(huán)
continue #略過(guò)余下循環(huán)語(yǔ)句
<語(yǔ)句塊>
else: #迭代完畢則執(zhí)行下面語(yǔ)句
<語(yǔ)句塊>
推導(dǎo)式
- 可以用來(lái)生成列表、字典、集合的語(yǔ)句
- [<表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>]
- {<鍵值表達(dá)式>:<元素表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>}
- {<元素表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>}
生成式推導(dǎo)式
- 與推導(dǎo)式一樣語(yǔ)法(但是用的是圓括號(hào))
(<元素表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>) - 返回一個(gè)生成器對(duì)象,也是可迭代對(duì)象,但不會(huì)立即產(chǎn)生全部元素,僅在要用到元素的時(shí)候才生成,可以極大節(jié)省內(nèi)存
例外處理Exception Handing
- 代碼運(yùn)行可能出現(xiàn)的錯(cuò)誤
- 語(yǔ)法錯(cuò)誤:Syntax Error
- 除以0錯(cuò)誤:ZeroDivionError
- 列表下標(biāo)越界:IndexError
- 類(lèi)型錯(cuò)誤:TypeError
- 錯(cuò)誤會(huì)引起一些不必要的麻煩,如果希望掌控意外錯(cuò)誤,就需要在可能出錯(cuò)的地方設(shè)置陷阱捕捉錯(cuò)誤,引入try,except方式
try: #若出錯(cuò),則執(zhí)行except后的語(yǔ)句
except: #處理錯(cuò)誤代碼
else: #沒(méi)有出錯(cuò)執(zhí)行下面的代碼
finally: #無(wú)論出錯(cuò)否,都執(zhí)行的代碼
函數(shù)function
# def語(yǔ)句:
def <函數(shù)名>(<參數(shù)表>):
<縮減的要執(zhí)行的代碼>
return<函數(shù)返回值>
# 調(diào)用函數(shù):
<函數(shù)名>(<參數(shù)表>)# 無(wú)返回值
v=<函數(shù)名>(<參數(shù)表>)# 返回值賦值給變量v
定義函數(shù)的參數(shù):固定參數(shù)/可變參數(shù)
- 定義函數(shù)時(shí),參數(shù)可以有兩種;一種是參數(shù)表中寫(xiě)明了參數(shù)名key的參數(shù),固定了順序和數(shù)量
def func(key1,key2,key3=value3....):
一種是定義時(shí)還不知道會(huì)有多少參數(shù)傳入的可變參數(shù)
def func1(*args): #不帶key的多個(gè)參數(shù)
def func2(**kwargs): #帶key=val形式的多個(gè)參數(shù)
調(diào)用函數(shù)的參數(shù):位置參數(shù)/關(guān)鍵字參數(shù)
- 調(diào)用函數(shù)時(shí),可以傳進(jìn)兩種參數(shù);一種是沒(méi)有名字的位置參數(shù)(會(huì)按前后順序?qū)?yīng)),一種是指定了key值的關(guān)鍵字參數(shù)
- 如果混用,位置參數(shù)必須在關(guān)鍵字參數(shù)前
面向?qū)ο螅侯?lèi)的定義與調(diào)用
- 類(lèi)用來(lái)實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型ADT,封裝實(shí)體的屬性和行為
#定義類(lèi)
class <類(lèi)名>:
def __init__(self,<參數(shù)表>):
def <方法名>(self,<參數(shù)表>)
#調(diào)用類(lèi)
obj=<類(lèi)名>(<參數(shù)表>)
#返回一個(gè)對(duì)象實(shí)例,類(lèi)方法中的self指這個(gè)對(duì)象實(shí)例
類(lèi)定義中的特殊方法
- 在類(lèi)定義中實(shí)現(xiàn)一些特殊方法,可以方便的使用一些python內(nèi)置操作(所有特殊方法以?xún)蓚€(gè)下劃線(xiàn)開(kāi)始結(jié)束)
- __str__(self): 自動(dòng)轉(zhuǎn)化為字符串
- __add__(self,other): 使用+操作符
- __mul__(self,other): 使用*操作符
- __eq__(self,other): 使用==操作符
類(lèi)的繼承機(jī)制
- 如果有兩個(gè)類(lèi)具有“一般-特殊”的邏輯關(guān)系,那么特殊類(lèi)就可以作為一般類(lèi)的“子類(lèi)”來(lái)定義,從“繼承”屬性和方法
class <子類(lèi)名>(<父類(lèi)名>):#可以繼承多個(gè)父類(lèi)
def <重定義的方法的名稱(chēng)>(self,...):
- 子類(lèi)對(duì)象可以調(diào)用父類(lèi)方法,除非這個(gè)方法在子類(lèi)中重新定義了
