python學習筆記(五)——語句
語句(條件、迴圈和其他語句)
之前一直在學習資料結構,單純的結構並不能做什麼事,只有組成語句之後才能實現比較複雜的功能,和其他語言一樣,條件、迴圈是必不可少的。學習基本語句之前,先看一些其它知識。
關於print:
>>> print 1,2,3 #print的引數不能構成一個元組 1 2 3 >>> 1,2,3 (1, 2, 3) >>> print (1,2,3) (1, 2, 3) >>> print `Age`,22 #輸出的每個引數之間插入了一個空格 Age 22 >>> name=`jason` >>> greeting=`hello,` >>> print greeting,name #同時輸出文字和變數值 hello, jason
如果在結尾處加上逗號,那麼接下來的語句會和前一條語句在同一行列印,如:
print `hello,`, print `world!` #輸出的結果為hello,world,注意這裡要在指令碼中執行
關於模組匯入:
已經知道,匯入模組的時候可以有以下幾個方式:
import module
from module import function
from module import function1,function2,…..
from module import *
可以使用as為整個模組或者函式提供別名:
>>> import math as m >>> m.sqrt(4) 2.0 >>> from math import sqrt as S >>> S(4) 2.0
關於賦值:
(1)、序列解包——將多個值的序列解開,然後放到變數的序列中
>>> x,y,z=1,2,3 #多個賦值操作可以同時進行 >>> print x,y,z 1 2 3 >>> x,y=y,x #兩個或多個變數交換 >>> print x,y,z 2 1 3 >>> values=1,2,3 #序列解包 >>> values (1, 2, 3) >>> a,b,c=values >>> a 1
#當函式或者方法返回元組時,這個很有用,它允許返回一個以上的值並打包成元組 >>> seq={`name`:`jason`,`phone`:`34223`} >>> key,value=seq.popitem() #獲取popitem方法刪除時返回的鍵值對 >>> key `phone` >>> value `34223`
注意:解包的序列中的元素數量必須和放置在賦值號=左邊的變數數量完全一致
(2)、鏈式賦值
>>> x=y=z=2 #則xyz的值均為2 >>> y=3 >>> x=y >>> x 3
(3)、增量賦值
>>> x=2 >>> x+=1 >>> x*=2 >>> x 6 >>> str=`python` >>> str*=2 >>> str `pythonpython`
在學習語句之前,我想說python中的縮排是個很坑爹的東西,它不僅僅是可讀性那麼簡單了,少了或多了一個空格都是語法錯誤,而且很難排查,而且tab鍵也不太建議用,每個縮排是4個空格。因為python中的語句塊不是通過大括號來區分的,所以就由縮排擔當了這個大括號的角色,對它要求嚴格也很正常。
條件和條件語句:
(1)、布林變數
python中把空值和0也看作是false,總結下來,python中的假有如下幾個:
False,None,0,””,(),[],{} 即空字串、空元組、空列表、空字典都為假。其它的一切都被直譯器解釋為真
>>> True True >>> False False >>> bool(0) False >>> bool("") False >>> bool(42) True >>> 0==0 True
(2)、if、elif、else語句(注意縮排且最好作為指令碼執行而不是在互動式環境下)
num=input(`enter a number:`) if num>0: print `positive number` elif num<0: print `negative number` else : print `zero` raw_input(`press any key to exit!`)
(3)、巢狀程式碼塊
name=input(`please input your name:`) if name.endswith(`jzhou`): if name.startswith(`Mr.`): print `hello,Mr.jzhou` elif name.startswith(`Mrs.`): print `hello,Mrs.jzhou` else: print `hello,jzhou` else: print `hello,stranger!` raw_input(`press any key to exit!`)
(4)、更復雜的條件
1)、比較運算子(==,<,<=,>,>=,!=)
>>> `foo`==`foo` True >>> `foo`==`oof` False >>> `foo`!=`oof` True
2)、is:同一性運算子(判斷是否屬於同一個物件,而不是值是否相等)
>>> x=y=[1,2,3] >>> z=[1,2,3] >>> x==y True >>> x==z True >>> x is y True >>> x is z False
再看一個例子,有意讓x和y的值相等,看看它們是否屬於同一物件
>>> x=[1,2,3] >>> y=[2,4] >>> x is not y True >>> del x[2] #刪除x中的元素3,即為[1,2] >>> y[1]=1 #將y的第二個元素改為1,即為[2,1] >>> y.reverse () #將y的元素倒序,即為[1,2] >>> x==y True >>> x is y False
3)、in:成員資格運算子
>>> name `jason` >>> if `s` in name: print `your name contains the letter "s"` else : print `your name doesn`t contains the letter "s"` your name contains the letter "s"
4)、字串和序列的比較
>>> "alpha"<"beta" True >>> `Jzhou`.lower()==`JZHOU`.lower() True >>> [1,2]<[2,1] True >>> [2,[1,5]]>[2,[1,4]] True
5)、邏輯運算子(and,or)
>>> number=input(`enter a number between 1 and 10:`) enter a number between 1 and 10:4 >>> if number <=10 and number >=1: print `Great!` else: print `wrong!` Great!
斷言——當輸入不符合條件時,可以用斷言來解釋,即在程式中置入檢查點
>>> age=-1 >>> assert 0<age<100,`The age must be realistic` #如果age輸入在[0,100]之外,則提示出錯 Traceback (most recent call last): File "<pyshell#79>", line 1, in <module> assert 0<age<100,`The age must be realistic` AssertionError: The age must be realistic
迴圈
(1)、while
>>> x=1 >>> while x<=100: print x x+=1
(2)、for
>>> words=[`this`,`is`,`an`,`egg`] >>> for word in words: print word this is an egg >>> numbers=[1,2,3,4,5,6,7,8,9] >>> for num in numbers: print num
有個內建的迭代函式range,它類似於分片,包含下界,不包含上界
>>> range(1,10) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> for num in range(1,5): print num
(3)、迴圈遍歷字典元素
>>> d={`x`:1,`y`:2,`z`:3} >>> for key in d: print key,`corresponds to`,d[key] y corresponds to 2 x corresponds to 1 z corresponds to 3 >>> for key,value in d.items (): #這種用法很重要 print key,`corresponds to`,value y corresponds to 2 x corresponds to 1 z corresponds to 3
常見迭代工具
(1)、並行迭代
>>> names=[`jzhou`,`jason`,`james`] >>> ages=[22,42,45] >>> for i in range(len(names)): #i是迴圈索引 print names[1],`is`,ages[i],`years old` jason is 22 years old jason is 42 years old jason is 45 years old
內建的zip函式可以進行並行迭代,並可以把兩個序列“壓縮”在一起,然後返回一個元素的列表
>>> for name,age in zip(names,ages): #在迴圈中解包元組 print name,`is`,age,`years old` jzhou is 22 years old jason is 42 years old james is 45 years old
# zip函式可以作用於任意多的序列,並且可以應付不等長的序列,最短的序列“用完”則停止 >>> zip(range(5),xrange(10000)) [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
#注意:這裡最好不要用range,因為range函式一次建立整個序列,而xrange一次只建立一個數。當需要迭代一個巨大的序列時,無疑xrange更高效。即此例中,使用xrange,序列只建立前5個數,而使用range則建立10000個,而我們只需要5個
(2)、翻轉和排序迭代
>>> sorted([4,3,6,8,3]) [3, 3, 4, 6, 8] >>> sorted(`hello,python!`) [`!`, `,`, `e`, `h`, `h`, `l`, `l`, `n`, `o`, `o`, `p`, `t`, `y`] >>> list(reversed (`hello,world!`)) [`!`, `d`, `l`, `r`, `o`, `w`, `,`, `o`, `l`, `l`, `e`, `h`] >>> ``.join(reversed(`Hello,world!`)) `!dlrow,olleH`
reversed和sorted函式和列表的reverse和sort函式類似
跳出迴圈
(1)、break——退出迴圈
>>> from math import sqrt >>> for n in range(99,0,-1): root=sqrt(n) if root==int(root): print n break 81
設定range的步長(第三個引數)也可以進行迭代
>>> range(0,10,2)
[0, 2, 4, 6, 8]
(2)、continue——跳出本次迴圈,繼續下輪迴圈(不常用)
列表推導式——輕量級迴圈(列表推導式是利用其它列表建立新列表)
>>> [x*x for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
也可以在迴圈中加判斷條件,如計算能被3整除的數的平方
>>> [x*x for x in range(10) if x%3==0] [0, 9, 36, 81]
也可以使用雙重迴圈,太強大了
>>> [(x,y) for x in range(3) for y in range(3)] [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
如果我們用普通方式實現上述的雙重迴圈,則程式碼顯得有點冗餘
>>> result=[] >>> for x in range(3): for y in range(3): result .append((x,y)) >>> result [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
其它語句——pass,del,exec
(1)、pass
由於python中空程式碼塊是非法的,所以在什麼事都不用做到情況下,可以使用pass作為佔位符。(註釋和pass語句聯合的代替方案是插入字串,後面筆記會介紹文件字串)
(2)、del
>>> x=1 >>> del x #del會移除一個物件的引用,也會移除名字本身 >>> x #x被刪除後,則不存在 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> x NameError: name `x` is not defined >>> x=[`hello`,`world`] >>> y=x #x和y指向同一個列表 >>> y[1]=`python` >>> x [`hello`, `python`] >>> del x #刪除x後,y依然存在,因為刪除的只是名稱,而不是列表本身的值 >>> y [`hello`, `python`]
(3)、exec
用來執行儲存在字串或檔案中的Python語句。
>>> exec `a=100` >>> a 100 >>> exec `print "hello,world!"` hello,world! >>> h=[`hello`] >>> w=`world` >>> exec (`h.append(%s)` % `w`) >>> h [`hello`, `world`]
>>> str = “for i in range(0,5): print i“
>>> c = compile(str,“,`exec`)
>>> exec c
0
1
2
3
4
(4)eval
用來計算儲存在字串中的有效Python表示式。
>>> eval(`2*3`) 6
相關文章
- Python學習筆記 - if語句Python筆記
- Python學習筆記3(條件語句+迴圈語句)Python筆記
- SQLite語句學習筆記SQLite筆記
- Python零基礎學習筆記(十八)——break語句和continue語句Python筆記
- 字典--Python學習筆記(五)Python筆記
- Python學習筆記(語法篇)Python筆記
- 【廖雪峰python入門筆記】if語句Python筆記
- JVM 學習筆記(五)JVM筆記
- cmake學習筆記(五)筆記
- 《C++ Primer》學習筆記(五):迴圈、分支、跳轉和異常處理語句C++筆記
- Python學習之路4-if語句Python
- Python學習筆記Python筆記
- 【學習筆記】python筆記Python
- DP學習筆記(五)(2024.11.16)筆記
- c++學習筆記(五)C++筆記
- Kubernetes學習筆記(五):卷筆記
- Python 3 學習筆記之——基礎語法Python筆記
- 腦圖學習 JavaScript 之犀牛書【五】語句JavaScript
- 英語學習筆記筆記
- 語言模型(五)—— Seq2Seq、Attention、Transformer學習筆記模型ORM筆記
- Jenkinsant介紹(學習筆記五)Jenkins筆記
- Qt學習筆記(五)QString 字串QT筆記字串
- python——Matplotlib學習筆記Python筆記
- python學習筆記4Python筆記
- Python學習筆記(三)Python筆記
- python——numpy學習筆記Python筆記
- python學習筆記(1Python筆記
- Python學習筆記 - queuePython筆記
- Python學習筆記 - asyncioPython筆記
- Python 學習筆記(一)Python筆記
- Python學習筆記 - aiohttpPython筆記AIHTTP
- python學習筆記(二)Python筆記
- Python學習筆記(2)Python筆記
- Effective Python學習筆記Python筆記
- python 相似語句匹配(非機器學習)Python機器學習
- C 語言學習筆記筆記
- C語言學習筆記C語言筆記
- 拉丁語學習筆記 一筆記
- java學習基礎篇筆記4-----switch-case語句+Scanner類Java筆記