python基本语句
文章目錄
- 1.賦值語句
- 序列賦值語句:
- 多目標賦值語句:
- 增強賦值語句:
- 表達式語句
- 2.條件語句和循環語句
- if語句:
- while循環:
- for循環:
- range計數器
- zip函數
- enumerate函數
1.賦值語句
>>> a=1 >>> b=2 >>> c,d=a,b >>> c,d (1, 2) >>> [c,d]=[a,b] >>> c,d (1, 2) >>> [c,d] [1, 2] >>> a,b=b,a >>> a,b (2, 1) >>> [a,b,c]=(1,2,3) >>> a,c (1, 3) >>> (a,b,c)='abc' >>> a,c ('a', 'c') >>> string = 'abcd' >>> a,b,c,d=string >>> a,c ('a', 'c') >>> a,b,c=string Traceback (most recent call last):File "<pyshell#16>", line 1, in <module>a,b,c=string ValueError: too many values to unpack (expected 3) >>> a,b,c=string[0],string[1],string[2:] >>> a,b,c ('a', 'b', 'cd') >>> a,b=string[:2] >>> c=string[2:] >>> a,b,c ('a', 'b', 'cd') >>> (a,b),c=string[:2],string[2:] >>> a,b,c ('a', 'b', 'cd') >>> ((a,b),c)=('ab','cd') >>> a,b,c,d ('a', 'b', 'cd', 'd') >>> range(3) range(0, 3) >>> a,b,c=range(3) >>> a,b,c (0, 1, 2) >>> d=[1,2,3,4] >>> while d:a,d=d[0],d[1:]print(a,d)1 [2, 3, 4] 2 [3, 4] 3 [4] 4 [] >>> a=[1,2,3,4] >>> b,c,d,e=a >>> print(b,c,d,e) 1 2 3 4 >>> c,d=a Traceback (most recent call last):File "<pyshell#40>", line 1, in <module>c,d=a ValueError: too many values to unpack (expected 2) >>> c,*d=a >>> c,d (1, [2, 3, 4]) >>> *c,d=a >>> c,d ([1, 2, 3], 4) >>> b,*c,d=a >>> b,c,d (1, [2, 3], 4) >>> b,c,*d=a >>> b,c,d (1, 2, [3, 4]) >>> a,*b='cde' >>> a,b ('c', ['d', 'e']) >>> s='cde' >>> s[0],s[1:] ('c', 'de') >>> d=[1,2,3,4] >>> while d:a,*d=dprint(a,d)1 [2, 3, 4] 2 [3, 4] 3 [4] 4 [] >>> d [] >>> d=[1,2,3,4] >>> a,b,c,*e=d >>> print(a,b,c,d) 1 2 3 [1, 2, 3, 4] >>> print(a,b,c,e) 1 2 3 [4] >>> a,b,c,e,*f=d >>> print(a,b,c,e,f) 1 2 3 4 [] >>> a,b,*c,e,f=d >>> print(a,b,e,f,c) 1 2 3 4 [] >>> *a=d SyntaxError: starred assignment target must be in a list or tuple >>> *a,=d >>> a [1, 2, 3, 4] >>> ,*a=d SyntaxError: invalid syntax >>> a=b=c='fgh' >>> a,b,c ('fgh', 'fgh', 'fgh') >>> a=b=1 >>> b=b+1 >>> a,b (1, 2) >>> a=b=1 >>> b+=1 >>> a,b (1, 2) >>> a=b=[] >>> b.append(1) >>> a,b ([1], [1]) >>> a=[] >>> b=[] >>> b.append(1) >>> a,b ([], [1]) >>> w=1 >>> w+=1 >>> w 2 >>> s='aa' >>> s+='bb' >>> s 'aabb' >>> p=[1,2] >>> p=p+[3] >>> p [1, 2, 3] >>> p.append(4) >>> p [1, 2, 3, 4] >>> p+=[1,2] >>> p [1, 2, 3, 4, 1, 2] >>> a=[1,2] >>> a=b >>> b=b+[3,4] >>> a,b ([1], [1, 3, 4]) >>> a [1] >>> a=[1,2] >>> b=a >>> b=b+[3,4] >>> a,b ([1, 2], [1, 2, 3, 4]) >>> a=[1,2] >>> b=a >>> b+=[3,4] >>> a,b ([1, 2, 3, 4], [1, 2, 3, 4]) >>> a=[1,2] >>> a.append(3) >>> a [1, 2, 3] >>> a=a.append(4) >>> a >>> print(a) None >>> x='abc' >>> y=1 >>> z=['sdf'] >>> print(x,y,z) abc 1 ['sdf'] >>> print(x,y,z,sep='') abc1['sdf'] >>> print(x,y,z,sep=', ') abc, 1, ['sdf'] >>> print(x,y,z,end='') abc 1 ['sdf'] >>> print(x,y,z,end='--=\n') abc 1 ['sdf']--= >>> print(x,y,z,sep='# ',end='@ ') abc# 1# ['sdf']@ >>> print(x,y,z,end='@ ',sep='# ') abc# 1# ['sdf']@ >>> print(x,y,z,sep=', ',file=open('ort.txt','w')) >>> print(x,y,z) abc 1 ['sdf'] >>> print(open('ort.txt').read()) abc, 1, ['sdf']>>> tt='%s:%-.2f,%04d'%('ww',123,11) >>> print(tt) ww:123.00,0011 >>> print('%s:%-.2f,%04d'%('ww',123,11)) ww:123.00,0011 >>> print('hello') hello >>> import sys >>> sys.stdout.write('hello\n') hello 6 >>> import sys >>> temp=sys.stdout >>> sys.stdout=open('a.txt','a') >>> print('qwert') >>> print(1,1,1) >>> sys.stdout.close() >>> sys.stdout=temp >>> print('goback') goback >>> print(open('a.txt').read()) qwert 1 1 1>>> k=open('k.txt','a') >>> print(a,b,c,file=k) >>> print(z,x,c) ['sdf'] abc fgh可以看出:
序列賦值語句:
1.右邊可以是任何類型的序列,而且賦值語句執行時,python會建立臨時元組,存儲右側變量原始值,然后賦值運算符右側元組的值和左側元組變量進行匹配,因此在交換兩個變量時,不需要增加臨時變量。
2.主體的數目和目標的項數必須一致。可以通過分片,嵌套序列,擴展序列解包,來改變左側元素與右側的對應關系
3.對于擴展序列解包來說:帶星號的名稱可能只匹配單個項,但是總會向其賦值一個列表,如果沒有內容和其匹配,那么它會賦值一個空的列表。通過分片和擴展序列解包對比,可以發現,他們可以實現同樣效果,只不過擴展序列解包減少很多輸入,更加方便
多目標賦值語句:
1.多目標賦值:直接把右側對象賦值給左側所有提供的變量(多個目標)。
2.對于不可變對象來說,修改其中一個變量,不會對其他變量造成影響,因為不可變對象(比如數字)不支持在原處的修改;但是對于可變對象(列表或字典)來說,采用多變量賦值導致兩個變量引用相同對象,對其中一個變量修改,也會影響另一個變量。因此為了避免,需要在單獨的語句初始化可變對象。
增強賦值語句:
1.增強賦值:比如:a+=1替代a=a+1
2.增強賦值語句的原理:直接在原處執行修改運算。而普通的則是先創建一個新的對象,進行運算,然后把運算結果復制到左側。因此使用增強賦值語句會執行的更快
3.對于合并列表這個例子來說:
①:p=p+[1,2]
②:p+=[1,2]
④:p.extend([1,2])
其中①語句的運行機制:創建一個新對象,把等式右邊左側的p復制到列表中,再把右側[1,2]復制到列表中。
而使用②語句,python會自動調用extend方法,就相當于④語句,直接在內存塊末尾添加項
由此可見:+=直接對列表進行原處修改,而+合并則是生成新的對象
因此,d.append返回值不是一個對象,如果我們輸出d.append那么會顯示none
4.因此由3可知:對于共享引用情況,對其中一個變量使用+=,兩個變量都會變,而對其中一個變量使用+,只有這個變量會變。
表達式語句
1.具有自定義分隔符以及終止符的功能,而且如果想要顯示更具體的格式,那么可以提前構造一個字符串,然后打印字符串。
2.對于輸出流來說:我們可以重定向輸出流,讓他輸出到我們指定文件之中。其中可以直接在print里面增加file項。或者是賦值sys.stdout,但是此時注意我們在完成指定輸出之后還需回復到原始的輸出流。
2.條件語句和循環語句
>>> x 's' >>> if x=='s':print('ddff') elif x=='fff':print('dsd') else:print('sdf!!')ddff >>> cho = 'ds' >>> print({'dd':1,'dds':2,'ds':3}[cho]) 3 >>> if cho == 'dd':print(1) elif cho=='dds':print(2) else : print(3)3 >>> g={'dsd':1,'sa':2,'er':3} >>> print(g.get('sa','notin')) 2 >>> print(g.get('ddd','www')) www >>> cj='dd' >>> if cj in g:print (g[cj]) else:print('www')www >>> 1 or 2,3 or 4 (1, 3) >>> [] or 3 3 >>> [] or {} {} >>> 2 and 3,3 and 2 (3, 2) >>> []and {} [] >>> 3 and {} {} >>> a='dd'if 's' else 'ee' >>> a 'dd' >>> x='qwer' >>> while x:print(x,end=' ')x=x[1:]qwer wer er r >>> a=1;b=11 >>> while a<b:print(a,end=' ')a+=11 2 3 4 5 6 7 8 9 10 >>> x=9 >>> while x:x=x-1if x%2==0: continueprint(x,end=' ')7 5 3 1 >>> for x in ['a','b','c']:print(x,end=' ')a b c >>> sum=0 >>> for x in [1,2,3,4]:sum+=x>>> sum 10 >>> for i in [1,2,3,4]:sum*=i>>> sum 240 >>> s='werty' >>> t=('e','rt','ww') >>> for x in s:print(x,end=', ')w, e, r, t, y, >>> for x in t:print(x,end=' ')e rt ww >>> g=[(1,2),(3,4),(5,6)] >>> for (a,b) in g:print(a,b)1 2 3 4 5 6 >>> d={'a':1,'b':2,'c':3} >>> for key in d:print(key,'=>',d[key])a => 1 b => 2 c => 3 >>> list (d.items()) [('a', 1), ('b', 2), ('c', 3)] >>> for (key,value) in d.items():print(key,'=>',value)a => 1 b => 2 c => 3 >>> g [(1, 2), (3, 4), (5, 6)] >>> for k in g:a,b=kprint(a,b)1 2 3 4 5 6 >>> ((a,b),c)=((1,2),3) >>> a,b,c (1, 2, 3) >>> for ((a,b),c) in [((1,2),3),((4,5),6)]:print(a,b,c)1 2 3 4 5 6 >>> for((a,b),c)in [([1,2],3),['xy',6]]:print(a,b,c)1 2 3 x y 6 >>> a,*b,c=(1,2,3,4) >>> a,b,c (1, [2, 3], 4) >>> for(a,*b,c)in[(1,2,3,4),(5,6,7,8)]:print(a,b,c)1 [2, 3] 4 5 [6, 7] 8 >>> for k in [(1,2,3,4),(5,6,7,8)]:a,b,c=k[0],k[1:3],k[3]print(a,b,c)1 (2, 3) 4 5 (6, 7) 8 >>> items=['ss',11,(2,3),2.3] >>> tests=[(4,5),3.2] for i in tests:for j in items:if i==j:print (i,' found')break;else:print(i,'not found')(4, 5) not found 3.2 not found >>> for i in tests:if i in items:print(i,'found')else :print(i,'not found')(4, 5) not found 3.2 not found >>> a='wwe' >>> b='rre' >>> res=[] >>> for x in a:if x in b:res.append(x)>>> res ['e'] >>> list (range(5)),list (range(2,5)),list(range(0,10,2)) ([0, 1, 2, 3, 4], [2, 3, 4], [0, 2, 4, 6, 8]) >>> list(range(-5,5)) [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4] >>> list(range(5,-5,-1)) [5, 4, 3, 2, 1, 0, -1, -2, -3, -4] >>> for i in range(3):print(1,'pe')1 pe 1 pe 1 pe >>> for i in range(3):print(i,'pe')0 pe 1 pe 2 pe >>> x='jki' >>> for i in x:print(i,end=' ')j k i >>> i=0 >>> n=len(x) >>> while(i<n):print(x[i],end=' ')i+=1j k i >>> for i in range(n):print(x[i],end=' ')j k i >>> for i in range(0,n,2):print(x[i],end=' ')j i >>> for i in x[::2]:print(i,end=' ')j i >>> l=[1,2,3,4,5] >>> for x in l:x+=1>>> l [1, 2, 3, 4, 5] >>> x 6 >>> n=len(l) >>> for i in range(n):l[i]+=1>>> l [2, 3, 4, 5, 6] >>> a=[1,2,3,4] >>> b=[5,6,7,8] >>> zip(a,b) <zip object at 0x000001B170A03D88> >>> list(zip(a,b)) [(1, 5), (2, 6), (3, 7), (4, 8)] >>> for (x,y) in zip(a,b):print(x,y,'--',x+y)1 5 -- 6 2 6 -- 8 3 7 -- 10 4 8 -- 12 >>> s1='asd' >>> s2='ert33243' >>> list(zip(s1,s2)) [('a', 'e'), ('s', 'r'), ('d', 't')] >>> keys = ['dd','cc','bb'] >>> vals = [1,2,3] >>> list(zip(keys,vals)) [('dd', 1), ('cc', 2), ('bb', 3)] >>> d={} >>> for (k,v) in zip(keys,vals):d[k]=v>>> d {'dd': 1, 'cc': 2, 'bb': 3} >>> d1=dict(zip(keys,vals)) >>> d1 {'dd': 1, 'cc': 2, 'bb': 3} >>> s='asdf' >>> num=0 >>> for i in s:print(i,'nto',num)num += 1a nto 0 s nto 1 d nto 2 f nto 3 >>> num=0 >>> for (num,i) in enumerate(s):print(i,'not',num)a not 0 s not 1 d not 2 f not 3 >>> for (num,i) in enumerate(s):print(i,'not',num)a not 0 s not 1 d not 2 f not 3可以看出:
if語句:
1.if elif else 可以有多路分支,首行以冒號結尾,首行下一行嵌套的代碼按縮進行的格式書寫。在一個單獨的嵌套塊中,所有語句必須縮進相同距離。
2.對于字典來說,其get方法以及索引運算也可以通過if語句來實現
3.對于布爾and和or運算符來說,他們總是會返回對象:
or是短路計算,python從左至右,在其找到的第一個真值操作數的地方停止。如果左右都為假,那么返回右邊那個對象。
and運算,python從左至右計算操作數,并停在第一個為假的對象上。如果都為真,那么返回右邊那個對象
4.三元表達式:
if x :
a=b
else :
a=c
等價于=> a=b if x else c
while循環:
0.是一種迭代結構,用于重復執行某語句塊。
1.while 測試表達式,首行以冒號結尾,首行下一行嵌套的代碼按縮進行的格式書寫。在一個單獨的嵌套塊中,所有語句必須縮進相同距離。python會一直循環,直到遇到break或者測試表達式為假
2.循環else:python特有,支持for和while循環,如果循環離開時沒有遇到break語句,那么就會執行else塊。
for循環:
1.屬于序列迭代器,可用于遍歷任何可迭代對象,如字符串,列表,元組。
2.首行由賦值目標和遍歷對象組成,運行for循環時,序列對象元素賦值給目標,然后循環主體使用目標來引用序列當前元素。
3.循環目標本身可以時元組,字符,字符串。這可以根據遍歷對象的類型更改。
4.for循環也可以遍歷文件和字典,對于字典來說,可以使用items方法,讓其返回一個元組列表,然后再進行for循環遍歷
5.對于嵌套for循環來說,使用in運算符隱式的掃描列表來找到匹配,可以減少內層循環。
range計數器
1.range會產生一個整數列表,如果只有一個參數a,從零開始,一共a個數。如果兩個參數,左閉右開。如果三個參數,那么第三個參數是步長
2.其實這個range就相當于c語言循環中常用的n。n=strlen(),然后i從0到n。因此,我們如果把列表當成c語言中數組,那么就可以把每次循環的賦值目標i作為下標,對列表進行修改。
zip函數
1.zip會把一個或多個序列中,在同一豎行的元素配成對,然后同一對的放到一個元組里,最后返回一個元組列表。
2.當幾個序列長度不同時,zip會以最短序列長度來決定元組中的數目
3.我們也可以通過zip和for循環來構造字典
enumerate函數
它能同時記錄偏移值和偏移值處的元素
總結
以上是生活随笔為你收集整理的python基本语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: malloc动态分配数组以及指针数组大小
- 下一篇: cv mat的shape_将ndarra