Python常用语句及流程控制
1. 賦值語句常用技巧
通過序列解包(sequence unpacking)可以將多個值的序列解開,讓后一一放置到變量的序列中。解包的序列中的元素必須和等號左邊變量數量一致。如下:
1 values = 1,2,32 3 print values # output: (1, 2, 3)4 5 x,y,z = values # output: 1 2 36 print x,y,z7 8 bob_Info = {'name':'Bob','email':'bob@gmail.com'}9 key,value = bob_Info.popitem() 10 11 print value # output: Bob?
1.2 鏈式賦值
通過使用鏈式賦值(chained assignment)可以將一個值同時賦給多個變量,如下:
x = y = z = 1print x,y,z # output: 1 1 1?
1.3 增量賦值
將表達式運算符(+、-、*、%、/等)放置在賦值運算符(=)的左邊,這些寫法被稱為增量賦值(augmented assignment),如下:
1 x = 6 2 3 x += 1 4 print x # output: 7 5 6 x *= 6 7 print x # output: 42?
2. 縮進 —— Python語言的風格
Python和其他語言有一個很大的區別在于:Python 使用硬回車來分割語句,使用冒號(:)和縮進來分割代碼塊。同一層次的語句必須有相同的縮進(每一組這樣的語句稱為一個塊),而C語言風格的編程語言(Java/C#/C++)則使用分號來分割語句,花括號來分割代碼塊。
正確的縮進
不要混合使用tab鍵和空格來進行縮進,這會使程序在跨平臺時不能正常的工作。官方推薦的做法是使用四個空格
如下:
1 # --- coding: utf-8 --- 2 3 age = 20 4 if age < 21: 5 print '不能買酒' 6 print '但是你可以來塊口香糖' 7 8 print '這句話處于If語句的外部'?
3. 條件和條件語句
在Python中解釋器認為標準值False、None和所有類型的數字0(浮點型,長整型等)、空序列(字符串、字典、列表等)都為假(False),如下所示:
1 print bool(False) # False 2 print bool(None) # False 3 print bool(0) # False 4 print bool("") # False 5 print bool(()) # False 6 print bool([]) # False 7 print bool({}) # False?
3.2 條件執行和if語句
和C#中的If語句類似,如果if內的條件判定為真,則執行后面的語句塊:
1 # -- coding: utf-8 -- 2 age = 18 3 4 if age >= 18: 5 print '年齡超過18歲了'?
3.3 else子句
else子句作為if語句的一部分,如果if語句的條件被判定為“False”則執行else子句后的語句塊,如下:
1 # -- coding: utf-8 -- 2 age = 16 3 4 if age >= 18: 5 print '年齡超過18歲了' 6 else: 7 print '未成年人'?
3.4 elif子句
elif子句是“else if”的簡寫,通過elif子句可以檢查更多的條件,如下:
1 num = input('Enter a number: ') 2 3 if num > 0: 4 print 'The number is positive' 5 elif num < 0: 6 print 'The number is negative' 7 else: 8 print 'The number is zero'?
3.5 嵌套代碼塊
有時候我們需要更加復雜的條件分支判定,這時可以嵌套使用if語句來實現,如下:
1 num = raw_input('Enter a number: ')2 3 if name.endswith('Gumby'):4 if name.startswith('Mr.'):5 print 'Hello. Mr.Gumby'6 elif name.startswith('Mrs.'):7 print 'Hello, Mrs. Gumby'8 else:9 print 'Hello,Gumby' 10 else: 11 print 'Hello,Stranger'?
3.6 更復雜的條件
比較運算符
比較運算符時條件中最基本的運算符,詳見下表:
| 表達式 | 描述 |
| x == y | x等于y |
| x < y | x小于y |
| x > y | x大于y |
| x >= y | x大于等于y |
| x <= y | x小于等于y |
| x != y | x不等于y |
| x is y | x和y是同一個對象 |
| x is not y | x和y是不同的對象 |
| x in y | x是y容器(序列等)的成員 |
| x not in y | x不是y容器(序列等)的成員 |
?
同一性運算符
在Python中使用is運算符來進行同一性判斷(即是否屬于同一個對象),而相等性運算符(==)用來判斷兩個對象是否相等,區別如下代碼所示:
1 x = [1,2,3,4,5] 2 y = [1,2,3,4,5] 3 4 print x == y # True 5 print x is y # False 6 7 z = y 8 print z is y # True避免將is運算符用于比較不可變值(如:數值類型,字符串等)
成員資格運算符
使用in來判斷某一元素是否屬于容器中的成員。如下:
1 book = 'Dive Into Python' 2 3 print 'P' in book # True?
字符串和序列比較
字符串(字符是按照本身的順序值排列的)可以按照字母排序進行比較,如:
print 'alpha' < 'beta' # True?不過實際的排序結果和使用不同的locale而變化。
locale模塊提供了C本地化(localization)函數的接口,同時提供相關函數,實現基于當前locale設置的數字,字符串轉換(int/float/string模塊中的轉換函數不受locale設置的影響)。更多locale模塊的信息,可以參考這里:http://docs.python.org/2/library/locale.html。
序列之間也可以通過對比序列中的元素來進行比較:
1 print [1,2] < [2,1] # True 2 print [1,[2,3]] > [1,[2,4,5]] # False?
布爾運算符
常用的布爾運算符有:
- and(&&)
- or(||)
- not(!)
和在C#這些語言中不同,在Python中直接通過它們對應的單詞使用,如:
1 age = 12 2 3 if age > 6 and age <= 12: 4 print 'schoolchild' 5 else: 6 print 'not schoolchild'?
4. 斷言
assert語句失敗的時候,會引發一個AssertionError。 與其讓程序在晚些時候崩潰,不如在錯誤條件出現時直接讓它崩潰,在Python中我們可以通過使用assert語句來實現一個斷言,assert語句失敗的時候會拋出AssertionError異常。如下:
1 # -- coding: utf-8 -- 2 mylist = ['item'] 3 assert len(mylist) >= 1 4 mylist.pop() 5 assert len(mylist) >= 1 '斷言失敗,程序終止運行'?
5. 循環
while循環中的表達式如果為True就會一直執行其后的語句塊,如下打印0-100的值:
1 x = 0 2 while x <= 100: 3 print x 4 x += 1?
5.2 for循環
在Python中for循序的使用方法基本和C#中的foreach一樣,使用for循環打印0-100的值:
1 numbers = range(0,101) 2 for num in numbers: 3 print num?
使用for循環遍歷字典
1 # -- coding: utf:8 -- 2 dic = {'a':1,'b':2,'c':3,'d':4,'e':5} 3 for key in dic: 4 print key, '對應',dic[key] 5 6 # 循環中使用序列解包 7 for key,value in dic.items(): 8 print key, '對應',value?
5.3 使用迭代工具
Python為了為了方便迭代序列提供了一些很好的工具函數。這些函數有Python內建的,但是大部分位于:itertools模塊中,更多信息可以參考Python文檔:http://docs.python.org/2/library/itertools.html
并行迭代
通過使用Python內建的zip函數可以將兩個序列合并為一個元組:
1 # -- coding: utf-8 --2 names = ['anne','beth','george','damon']3 ages = [12,45,32,102]4 5 # 將兩個序列“壓縮”在一起,返回一個元組的列表6 poeples = zip(names,ages)7 8 # 再循環中解包元組9 for name,age in poeples: 10 print name, 'is', age, 'years old'?
元組的長度等于相對較短序列的長度。如下:
1 # output: [(0, 0), (1, 1), (2, 2)] 2 print zip(range(3),xrange(100))?
編號迭代
如果需要在迭代序列的同時還要獲取當前迭代對象的索引,可以使用下面的方法:
1 # -- coding: utf-8 --2 3 strings = ['2','1','2','2','1']4 5 index = 06 for string in strings:7 if '2' in string:8 strings[index] = '1'9 index += 1 10 # output: ['1', '1', '1', '1', '1'] 11 print strings?
或者是直接使用內建的ernumerate函數:
1 # -- coding: utf-8 -- 2 3 strings = ['2','1','2','2','1'] 4 5 for index,string in enumerate(strings): 6 if '2' in string: 7 strings[index] = '1' 8 # output: ['1', '1', '1', '1', '1'] 9 print strings?
翻轉和排序迭代
reversed和sorted這兩個函數可以使用在任何序列或可迭代對象,返回的是翻轉或者排序后的版本。如下:
1 # -- coding: utf-8 --2 3 # output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 4 print sorted([9,1,8,2,6,5,4,3,7,0])5 6 # output: ['!', 'e', 'h', 'l', 'l', 'o']7 print sorted('hello!')8 9 # reversed 返回的是一個可迭代對象 10 # 通過list()函數將對象轉換為列表 11 # output: ['!', 'o', 'l', 'l', 'e', 'h'] 12 print list(reversed('hello!')) 13 14 # output: !olleh 15 print ''.join(reversed('hello!'))?
5.5 跳出循環
break: Python使用break語句跳出循環:
1 # -- coding: utf-8 -- 2 import random 3 4 while True: 5 # 生成0-9之間的隨機數 6 num = random.randrange(0,10) 7 print num 8 if num == 6: 9 break?
continue: continue語句會讓當前的迭代結束,直接開始下一輪的循環,如下所示:
1 # -- coding: utf-8 --2 3 # 輸出:64 for num in xrange(1,10):5 if num == 1:continue6 if num == 2:continue 7 if num == 3:continue8 if num == 4:continue9 if num == 5:continue 10 print num 11 break?
6.列表推導式
列表推導式(list comprehension)是利用其它列表創建新列表的一種方法,如下:
1 # -- coding: utf-8 -- 2 3 # output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 4 # 列表元素x由其自身的平方根組成 5 print [x*x for x in range(10)]?
增加條件: 我們還可以為創建的元素添加其它條件,如下:
1 # -- coding: utf-8 -- 2 3 # output: [0, 10, 20, 30, 40, 50] 4 # 列表元素x由其自身*2的倍數組成,且能被5整除 5 print [x*2 for x in range(30) if x % 5 ==0]?
多個for語句: 還可以通過使用多個for語句來生成列表:
1 # -- coding: utf-8 -- 2 3 # output: [(0, 0), (0, 1), (1, 0), (1, 1)] 4 # 生成x和y的所有組合 5 print [(x,y) for x in range(2) for y in range(2)]?
下面的for循環部分創建的列表和上面的推導式一樣:
1 # -- coding: utf-8 -- 2 3 result = [] 4 for x in range(2): 5 for y in range(2): 6 result.append((x,y)) 7 # output: [(0, 0), (0, 1), (1, 0), (1, 1)] 8 print result?
7. pass/del/exec 語句
pass語句——代碼中的占位符:?pass語句在Python代碼中充當占位符使用。比如說現在馬上就要測試一個if語句,但是其中還缺少一個語句塊(代碼不會執行,Python中空代碼塊是非法的),這個時候我們可以暫時使用pass語句來填充,如下:
1 # -- coding: utf-8 -- 2 3 age = 12 4 age = 5 5 if age > 6 and age <= 12: 6 print 'schoolchild' 7 else: 8 # 未完成 9 pass?
使用del語句刪除
Python解釋器通過垃圾回收可以將內存中沒有任何引用的對象給清理掉。我們也可以通過del語句我們也可以直接將一個對象從內存中清除,如下:
1 # -- coding: utf-8 -- 2 3 x = ['hello','world'] 4 5 del x 6 # NameError: name 'x' is not defined 7 print x?
使用exec和eval執行和求值字符串
使用exec語句可以執行存儲在字符串中的Python代碼,如下:
1 # output: hello,world 2 exec "print 'hello,world'"?
通過使用eval語句可以計算以字符串形式書寫的Python表達式,我們可以在Python交互解釋器中輸入如下代碼:
>>> eval(raw_input("Enter an arithmetic expression: +")) Enter an arithmetic expression: +16+16 32 >>>我們在程序中輸入了:16+16的表達式,通過eval執行后返值:32
為了提高程序的安全性,我們可以為exec語句和eval語句增加一點包裝,將這些語句限制在特定的作用域中,如下:
1 scope = {} 2 exec 'sqrl = 6' in scope 3 print scope['sqrl'] # output: 6 4 5 scope = {} 6 scope['x'] = 2 7 scope['y'] = 3 8 9 print eval('x * y',scope) # output: 6?
警告
在Python中使用exec執行Python代碼字符串和通過eval語句計算Python表達式,這樣的做法并不推薦,因為這樣會有潛在的嚴重漏洞。 因為可能會有用戶提供一些惡意的字符串作為代碼或表達式來執行,這樣程序會有潛在失去控制的危險。記住:在python中并沒有任何執行不可信任代碼的安全方式。
轉載于:https://www.cnblogs.com/meipu/p/9929609.html
總結
以上是生活随笔為你收集整理的Python常用语句及流程控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区块链教程Fabric1.0源代码分析T
- 下一篇: php在线打开pdf文件