python基礎之打 解包及運算子與控制流程

2022-04-29 14:45:06 字數 4485 閱讀 7953

python提供了兩個設計元祖和其他序列型別的處理的便利,也就是自動打包自動解包功能,比如:

data = 2,3,6,9
會使識別符號data賦值成元祖(2,3,6,9),這種行為稱為元祖的自動打包。在python中另一種常用的打包是從乙個函式中返回多個值,如:

return x,y
就會返回單個物件,也就是元祖(x,y)。

作為乙個對偶的打包行為,python也可以自動解包乙個序列,允許單個識別符號的一系列元素賦值給序列中的各個元素,具體如下:

a,b,c = range(1,4)      #等同於a=1、b=2、c=3

list1 = ['name','age','gender','height']

s1,s2,s3,s4 = list1 # s1='name',s2='age',s3='gender',s4='height'

s1,_,_,s4 = list1 # 下劃線表示不想要的資料,在這裡只是用於佔位

*_,s4 = list1 #如果有多個不想要的資料可以用*_代替

自動打包與解包結合起來就是同時分配技術,即我們可以顯式地將一系列的值賦給一系列的識別符號,語法為:

x,y,z = 3,4,6

x,y = y,x #依賴於同時分配技術,省去了中間值

長話短說,在python發展的過程中,出現了以下幾種格式化輸出:

name = 'du'

age = 18

print("姓名:%s,年齡:%s" % (name, age)) #最開始的版本

print("姓名:{},年齡:{}".format(name, age)) #公升級後的

print("姓名:,年齡:".format(name, age)) #{}內是索引

算術運算子:+加

-減*乘

/除//整數除%模

**冪比較運算子:

==等價

!=不等價

<

小於》大於<=

小於等於

>=

大於等於

邏輯運算子:

not邏輯非

and邏輯與

or邏輯或

相等運算子:

is同一實體

is not

不同實體

整數的位運算子:~取反

&按位與

|按位或

^按位異或

>>

右位移,按符號位填充

<<

左位移,用零填充

序列運算子:

s[j]

索引下標為j的元素

s[start:stop]

切片,[start,stop)的序列

s[start:stop:step]

切片,start+step,start+2*step...直到結束

s+t序列的連線

k*ss+s+s+s+....(k次)

val in s

檢查元素val在序列s中

val not in s

檢查元素val不在序列s中

集合字典的運算子:

key in s

檢查key是s的成員

key not in s

檢查key不是s的成員

s1 == s2

s1等價s2

s1 != s2

s1不等價s2

s1 <= s2

s1是s2的子集

s1 < s2

s1是s2的真子集

s1 >= s2

s1是s2的超集

s1 > s2

s1是s2的真超集(s1不等於s2)

s1 | s2

s1與s2的並集

s1 & s2

s1與s2的交集

s1 - s2

s1與s2的差集

s1 ^ s2

對稱差分

運算子優先順序:

型別符號

成員訪問

expr.member

函式/方法呼叫

expr(...)

容器下標/切片

expr[...]冪**

一元運算子

+ expr, - expr,~expr

乘/除*,/,//,%

加/減+,-

按位位移

<<,>>

按位與&

按位異或

^按位或|比較

is,is not,==,!=,in,not in等

邏輯非not

邏輯與and

邏輯或or

條件判斷

val if cond else val2

賦值=,+=,-=,*=等

條件結構(也稱if語句)提供了一種方法,用以執行基於乙個或多個布林表示式的執行結果而選擇的**塊。在python中,條件語句一般形式如下:

if first_condition:

first_body

elif second_condition:

second_body

elif third_condition:

third_body..

.else :

else_body

​ 其中每個條件都是布林表示式,並且每個主體包含乙個或多個在滿足條件時才執行的命令。如果滿足第乙個條件,那麼將執行第乙個結構體,而其他條件或者結構體不會執行。如果不滿足第乙個條件,那麼就這個流程就以相似的方式評估第二個條件,並繼續。整體構造的執行將決定必有乙個結構體會被執行。

python提供了兩種不同的迴圈結構。while迴圈允許以布林條件的重複測試作為自出的一般重複。for迴圈對定義序列的值提供了適當的迭代(如字串中的字元、列表中的元素或一定範圍內的數字)。

while 迴圈

在python中的while迴圈的語法如下:

while condition:

body

執行while迴圈時首先測試布林條件。如果條件為true,執行迴圈的主體。每次執行結構體後,重新測試迴圈條件,如果為true,那麼開始另一輪迭代。如果條件為false,那麼就終止迴圈。

例子:

j=0

while j < len(data) and data[j] != 'x':

j += 1

這裡給出乙個迴圈,通過字串行的索引,找到乙個輸入值為『x』的值或直接到達序列的尾部。

for 迴圈

在迭代一系列的元素時,python的for迴圈時一種比while更便利的選擇。for迴圈的語法可以用在任何型別的迭代結構中,如列表、元組、str、集合、字典或檔案。一般語法如下:

for element in iterable:

body

例如,我們考慮尋找乙個列表的元素中尋找最大值(不使用max函式),假設列表中至少有乙個元素:

biggest = data[0]

for val in data:

if val > biggest:

biggest = val

雖然我們也可以用while迴圈來完成上面任務,但for迴圈的優點就是簡潔,即不需要管理列表的明確索引以及構造布林迴圈條件。此外,我們還可以在while迴圈不適用的情況下使用for迴圈,例如遍歷乙個集合set,但是它不支援任何形式的索引。

基於索引的for迴圈:

雖然for迴圈可以遍歷每乙個元素,但是有乙個限制就是我們不知道這個元素在序列的哪乙個位置,所以我們需要用到range()來遍歷索引,比如我們想知道列表中最大元素的索引,我們可以這樣:

big_index = 0

for i in range(len(data)):

if data[i] > data[big_index]:

big_index = i

break 和 continue 語句
found = false

for i in data:

if i == target:

found = true

break

我們建議慎用break和continue語句,然而有些情況下,可以有效的使用這些命令,以免引入過於複雜的邏輯條件。

擴充套件與if相似的,while和for中也可以引用else語句,else語句只會在正常迴圈結束之後才會執行,如果遇到break,則不會執行else,這個知識點僅作了解,一般開發過程中不會用到。

Python基礎 組包和解包

組包組包 自動操作,當 右邊有多個資料的時候,會自動包裝成為元組 a 10,20,30 print a 解包變數數量 元素數量 會進行一一賦值 a,b,c 10,20,30 print a print b print c 進行變數值的相互交換,不用建立中間臨時變數 a 1 b 2 a,b b,a p...

python 基礎之算數運算

算術運算子 示例 python class number def init self,num self.num num 物件出現在 的左邊時會自動觸發 def add self,other print add return self.num other 物件出現在 的右邊時會自動觸發 def rad...

h264基礎及rtp分包解包

sodb 資料位元串 最原始的編碼資料 rbsp 原始位元組序列載荷 在sodb的後面填加了結尾位元 rbsp trailing bits 乙個bit 1 若干位元 0 以便位元組對齊。ebsp 擴充套件位元組序列載荷 在rbsp基礎上填加了仿校驗位元組 0x03 它的原因是 在nalu加到anne...