Python語法基礎(chǔ)
數(shù)據(jù)對(duì)象和組織
- 對(duì)現(xiàn)實(shí)世界實(shí)體和概念的抽象
- 簡單類型(表示):整數(shù)—int、浮點(diǎn)數(shù)—float、復(fù)數(shù)—complex、邏輯值—bool手销、字符串—str
- 容器類型(組織):列表—list、元組—tuple图张、集合—set锋拖、字典—dict
- 數(shù)據(jù)類型之間大都可以轉(zhuǎn)換
賦值和控制流
- 對(duì)現(xiàn)實(shí)世界處理和過程的抽象
- 運(yùn)算語句(處理與暫存):表達(dá)式計(jì)算诈悍、函數(shù)調(diào)用、賦值
- 控制流語句(組織語句描述過程):循環(huán)兽埃、條件分支侥钳、順序
- 定義語句也用來組織語句,描述一個(gè)包含一系列處理過程的計(jì)算單元:函數(shù)定義讲仰、慕趴、類定義
python數(shù)據(jù)類型
- 整數(shù)int:不受大小限制
- 浮點(diǎn)數(shù)float:受到17位有效數(shù)字的限制
- 整數(shù)與浮點(diǎn)數(shù)有常見的運(yùn)算包括加(+)、減(-)鄙陡、乘(*)冕房、除(/)、整除(//)趁矾、求余(%)耙册、指數(shù)冪等
- 一些常用數(shù)學(xué)函數(shù)在math模塊中
import math
a=math.sqrt(4)
#a=2
- 復(fù)數(shù):python內(nèi)置對(duì)復(fù)數(shù)的計(jì)算
- 支持所有常見的復(fù)數(shù)計(jì)算
- 對(duì)復(fù)數(shù)處理的數(shù)學(xué)函數(shù)在模塊cmath中
import cmath
a=cmath.sqrt(1+2j)
#a的值為復(fù)數(shù)1+2i開根號(hào)
- 邏輯值(bool):邏輯值僅包括True/False兩個(gè)
- 配合if/while等語句做條件判斷
- 其他數(shù)據(jù)類型可以轉(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ù)制(*)详拙、長度(len)、[start:end:step]用來切片(提取一部分)
- 高級(jí)操作:分割(split)蔓同、合并(join)饶辙、大小寫相關(guān)(upper/lower/swapcase)、替換字符(replace)等等
>>> 'a b c d'.split(' ')
['a', 'b', 'c', 'd']
>>> 'abc'.upper()
'ABC'
- 列表和元組
- python中有幾種類型是一系列元素組成的序列斑粱,以整數(shù)作為索引
- 字符串str就是一種同類元素的序列
- 列表list和元組tuple則可以容納不同類型的元素弃揽,構(gòu)成序列
- 元組是不能更新的序列(字符串也是)
- 列表則可以刪除、添加则北、替換矿微、重排序列中的元素
image - 創(chuàng)建列表:[]或者list()
- 創(chuàng)建元組:()或者tuple()
- 用索引[n]獲取元素(列表可變)
- +:連接列表/元組
- *:復(fù)制n次罢维,生成新列表/元組
- len():元素個(gè)數(shù)
- in:某個(gè)元素是否存在
- [start:end:step]:切片
方法名稱 | 使用例子 | 說明 |
---|---|---|
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ù)元素的無序組合
- 用set()創(chuàng)建空集
- 用set()從其他序列轉(zhuǎn)化生成集合
- 集合的常見操作:
in:判斷元素是否屬于集合坝疼、
|,union():并集朗徊、
&快骗,intersection():交集
-娜庇,difference():差集
^,symmetric_difference():異或
<=,<,>=,>:子集方篮,真子集思灌,超集,真超集
- 字典dict:
- 字典是通過鍵值key來索引元素value恭取,而不是像列表是通過連續(xù)的整數(shù)來索引
- 字典是可變類型
- 字典中元素value沒有順序,可以是任意類型
- 字典中的key可以是不可變類型(數(shù)值/字符串/元組)
python變量機(jī)制
- 引用數(shù)據(jù)對(duì)象
- 賦值語句a=0熄守,實(shí)際上是創(chuàng)建了名為a的變量蜈垮,然后指向數(shù)據(jù)對(duì)象“0”
- 所以變量可以隨時(shí)指向任何一個(gè)數(shù)據(jù)對(duì)象耗跛,如True,1.02等(這和靜態(tài)語言完全不同)
- 變量的類型隨著指向的數(shù)據(jù)對(duì)象類型改變而改變攒发。
- 可變類型的變量引用情況
- 由變量的引用特性调塌,可變類型的變量操作需要注意的是,多個(gè)變量通過賦值引用同一個(gè)可變類型對(duì)象時(shí)惠猿,通過任何一個(gè)變量改變了可變類型羔砾,其他變量也看到了改變
常用的連續(xù)序列生成器:range函數(shù)
- range(n):從0到n-1的序列
- range(start,end):從start到end-1的序列
- range(start,end,step)
- range函數(shù)返回range類型的對(duì)象,可以直接當(dāng)作序列使用偶妖,也可以轉(zhuǎn)換為list或者tuple等容器類型
建立大型數(shù)據(jù)結(jié)構(gòu)
- 嵌套列表:列表的元素是一些列表姜凄,可以通過alsit[i][j]來索引
- 字典元素可以是任意類型,所以也可以是字典
- 字典的鍵值可以是任意不可變類型趾访。
>>> 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)算語句:表達(dá)式扼鞋、函數(shù)調(diào)用申鱼、賦值
- 各類型的數(shù)據(jù)對(duì)象,可以通過各種運(yùn)算組織成復(fù)雜的表達(dá)式
- 調(diào)用函數(shù)或?qū)ο笤仆罚部梢苑祷財(cái)?shù)據(jù)捐友,所有可調(diào)用的事物稱為callable(調(diào)用函數(shù)或?qū)ο螅枰谄涿Q后加圓括號(hào)溃槐,有參數(shù)匣砖,寫在括號(hào)里,不加圓括號(hào)的函數(shù)或?qū)ο髢H表示自己竿痰,而不是調(diào)用)
- 將表達(dá)式或調(diào)用返回值傳遞給變量進(jìn)行引用脆粥,稱為賦值
控制流語句
- 條件if
if <邏輯條件>:
<語句塊>
elif <邏輯條件>:#可多個(gè)elif
<語句塊>
else:#只能一個(gè)
<語句塊>
- while循環(huán)
while <邏輯條件>:
<語句塊>
break #跳出循環(huán)
continue #略過余下循環(huán)語句
<語句塊>
else: #條件不滿足推出循環(huán),執(zhí)行下面代碼
<語句塊>
- for循環(huán)
for <變量> in <可迭代對(duì)象>:
<語句塊>
break #跳出循環(huán)
continue #略過余下循環(huán)語句
<語句塊>
else: #迭代完畢則執(zhí)行下面語句
<語句塊>
推導(dǎo)式
- 可以用來生成列表影涉、字典变隔、集合的語句
- [<表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>]
- {<鍵值表達(dá)式>:<元素表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>}
- {<元素表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>}
生成式推導(dǎo)式
- 與推導(dǎo)式一樣語法(但是用的是圓括號(hào))
(<元素表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>) - 返回一個(gè)生成器對(duì)象,也是可迭代對(duì)象蟹倾,但不會(huì)立即產(chǎn)生全部元素匣缘,僅在要用到元素的時(shí)候才生成,可以極大節(jié)省內(nèi)存
例外處理Exception Handing
- 代碼運(yùn)行可能出現(xiàn)的錯(cuò)誤
- 語法錯(cuò)誤:Syntax Error
- 除以0錯(cuò)誤:ZeroDivionError
- 列表下標(biāo)越界:IndexError
- 類型錯(cuò)誤:TypeError
- 錯(cuò)誤會(huì)引起一些不必要的麻煩鲜棠,如果希望掌控意外錯(cuò)誤肌厨,就需要在可能出錯(cuò)的地方設(shè)置陷阱捕捉錯(cuò)誤,引入try豁陆,except方式
try: #若出錯(cuò)柑爸,則執(zhí)行except后的語句
except: #處理錯(cuò)誤代碼
else: #沒有出錯(cuò)執(zhí)行下面的代碼
finally: #無論出錯(cuò)否,都執(zhí)行的代碼
函數(shù)function
# def語句:
def <函數(shù)名>(<參數(shù)表>):
<縮減的要執(zhí)行的代碼>
return<函數(shù)返回值>
# 調(diào)用函數(shù):
<函數(shù)名>(<參數(shù)表>)# 無返回值
v=<函數(shù)名>(<參數(shù)表>)# 返回值賦值給變量v
定義函數(shù)的參數(shù):固定參數(shù)/可變參數(shù)
- 定義函數(shù)時(shí)盒音,參數(shù)可以有兩種表鳍;一種是參數(shù)表中寫明了參數(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ù)譬圣;一種是沒有名字的位置參數(shù)(會(huì)按前后順序?qū)?yīng))瓮恭,一種是指定了key值的關(guān)鍵字參數(shù)
- 如果混用,位置參數(shù)必須在關(guān)鍵字參數(shù)前
面向?qū)ο螅侯惖亩x與調(diào)用
- 類用來實(shí)現(xiàn)抽象數(shù)據(jù)類型ADT厘熟,封裝實(shí)體的屬性和行為
#定義類
class <類名>:
def __init__(self,<參數(shù)表>):
def <方法名>(self,<參數(shù)表>)
#調(diào)用類
obj=<類名>(<參數(shù)表>)
#返回一個(gè)對(duì)象實(shí)例屯蹦,類方法中的self指這個(gè)對(duì)象實(shí)例
類定義中的特殊方法
- 在類定義中實(shí)現(xiàn)一些特殊方法,可以方便的使用一些python內(nèi)置操作(所有特殊方法以兩個(gè)下劃線開始結(jié)束)
- __str__(self): 自動(dòng)轉(zhuǎn)化為字符串
- __add__(self,other): 使用+操作符
- __mul__(self,other): 使用*操作符
- __eq__(self,other): 使用==操作符
類的繼承機(jī)制
- 如果有兩個(gè)類具有“一般-特殊”的邏輯關(guān)系绳姨,那么特殊類就可以作為一般類的“子類”來定義登澜,從“繼承”屬性和方法
class <子類名>(<父類名>):#可以繼承多個(gè)父類
def <重定義的方法的名稱>(self,...):
- 子類對(duì)象可以調(diào)用父類方法,除非這個(gè)方法在子類中重新定義了