Python語(yǔ)法基礎(chǔ)

Python語(yǔ)法基礎(chǔ)

數(shù)據(jù)對(duì)象和組織

  • 對(duì)現(xiàn)實(shí)世界實(shí)體和概念的抽象
  1. 簡(jiǎn)單類(lèi)型(表示):整數(shù)—int、浮點(diǎn)數(shù)—float、復(fù)數(shù)—complex、邏輯值—bool、字符串—str
  2. 容器類(lèi)型(組織):列表—list、元組—tuple、集合—set、字典—dict
  3. 數(shù)據(jù)類(lèi)型之間大都可以轉(zhuǎn)換

賦值和控制流

  • 對(duì)現(xiàn)實(shí)世界處理和過(guò)程的抽象
  1. 運(yùn)算語(yǔ)句(處理與暫存):表達(dá)式計(jì)算、函數(shù)調(diào)用、賦值
  2. 控制流語(yǔ)句(組織語(yǔ)句描述過(guò)程):循環(huán)、條件分支、順序
  3. 定義語(yǔ)句也用來(lái)組織語(yǔ)句,描述一個(gè)包含一系列處理過(guò)程的計(jì)算單元:函數(shù)定義、、類(lèi)定義

python數(shù)據(jù)類(lèi)型

  1. 整數(shù)int:不受大小限制
  2. 浮點(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
  1. 復(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)
  1. 邏輯值(bool):邏輯值僅包括True/False兩個(gè)
  • 配合if/while等語(yǔ)句做條件判斷
  • 其他數(shù)據(jù)類(lèi)型可以轉(zhuǎn)化為邏輯值,如0與非0等
bool(0)#False
bool(999)#True
  1. 字符串: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'
  1. 列表和元組
  • 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)刪除
  1. 集合set:集合是不重復(fù)元素的無(wú)序組合
  • 用set()創(chuàng)建空集
  • 用set()從其他序列轉(zhuǎn)化生成集合
  • 集合的常見(jiàn)操作:
    in:判斷元素是否屬于集合、
    |,union():并集、
    &,intersection():交集
    -,difference():差集
    ^,symmetric_difference():異或
    <=,<,>=,>:子集,真子集,超集,真超集
  1. 字典dict:
  • 字典是通過(guò)鍵值key來(lái)索引元素value,而不是像列表是通過(guò)連續(xù)的整數(shù)來(lái)索引
  • 字典是可變類(lèi)型
  • 字典中元素value沒(méi)有順序,可以是任意類(lèi)型
  • 字典中的key可以是不可變類(lèi)型(數(shù)值/字符串/元組)

python變量機(jī)制

  1. 引用數(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)型改變而改變。
  1. 可變類(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ǔ)句

  1. 條件if
if <邏輯條件>:
    <語(yǔ)句塊>
elif <邏輯條件>:#可多個(gè)elif
    <語(yǔ)句塊>
else:#只能一個(gè)
    <語(yǔ)句塊>
  1. while循環(huán)
while <邏輯條件>:
    <語(yǔ)句塊>
    break #跳出循環(huán)
    continue #略過(guò)余下循環(huán)語(yǔ)句
    <語(yǔ)句塊>
else: #條件不滿(mǎn)足推出循環(huán),執(zhí)行下面代碼
    <語(yǔ)句塊>
  1. 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ǔ)句
  1. [<表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>]
  2. {<鍵值表達(dá)式>:<元素表達(dá)式> for <變量> in <可迭代對(duì)象> if <邏輯條件>}
  3. {<元素表達(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ò)誤
  1. 語(yǔ)法錯(cuò)誤:Syntax Error
  2. 除以0錯(cuò)誤:ZeroDivionError
  3. 列表下標(biāo)越界:IndexError
  4. 類(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é)束)
  1. __str__(self): 自動(dòng)轉(zhuǎn)化為字符串
  2. __add__(self,other): 使用+操作符
  3. __mul__(self,other): 使用*操作符
  4. __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)中重新定義了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容