前言
最近在學習Java Sockst的時候遇到了一些麻煩事,我覺得我很有必要重新研究學習Python這種腳本語言,參考大神的經驗,淘到了一本學習Python的好書《"笨方法"學Python》,我決定花很長一段時間重新學習一下Python,把自己的一些總結經驗以及積累的一些東西放到博客上,大家可以一起互相學習討論...不足的地方還望大家能夠提出來,我進行適當的增添刪補...完善本文
正文
python2.7關鍵字及其總結:
| and | del | from | not | while | as | elif |
| global | or | with | assert | else | if | pass |
| yield | break | except | import | class | exec | |
| in | raise | continue | finally | is | return | def |
| for | lambda | try |
一共:31個。注意:如果要現在自己電腦中運行我寫的這些代碼,需要在第一行加上
#coding:utf-8 因為我的輸出中有中文
1.and:表示邏輯‘與’
2.del:用於list列表操作,刪除一個或者連續幾個元素。
3.from:導入相應的模塊,用import或者from...import
4.not:表示邏輯‘非’
5.while:while循環,允許重復執行一塊語句,一般無限循環的情況下用它。示例如下:
while Ture: if a > b: add()#調用函數求和 else: print "輸入錯誤!重新輸入!"
6.as:as單獨沒有意思,是這樣使用:with....as用來代替傳統的try...finally語法的。
基本思想是with所求值的對象必須有一個__enter__()方法,一個__exit__()方法。
緊跟with后面的語句被求值后,返回對象的__enter__()方法被調用,這個方法的返回值將被賦值給as后面的變量。當with后面的代碼塊全部被執行完之后,將調用前面,返回對象的__exit__()方法。示例如下:
1 class Sample: 2 def __enter__(self): 3 print "In __enter__()" 4 return "Foo" 5 6 def __exit__(self, type, value, trace): 7 print "In __exit__()" 8 9 10 def get_sample(): 11 return Sample() 12 13 14 with get_sample() as sample: 15 print "sample:", sample
輸出結果:
In __enter__() sample: Foo In __exit__()
第一步: __enter__()方法被執行
第二步: __enter__()方法返回的值 - 這個例子中是"Foo",賦值給變量'sample'
第三步:執行代碼塊,打印變量"sample"的值為 "Foo"
第四步: __exit__()方法被調用with真正強大之處是它可以處理異常。可能你已經注意到Sample類的__exit__方法有三個參數- val, type 和 trace。這些參數在異常處理中相當有用。
7.elif:和if配合使用的,if語句中的一個分支用elif表示。
8.global :定義全局變量,我的理解就是:要想給全局變量重新賦值,就要global一下全局變量(相當於告訴你:哦,注意了!下面我要設定全局變量的值的),之后在重新賦值。示例如下:
1 #coding:utf-8 2 ################# 3 ################# 4 #熟悉global 5 #定義全局變量,變量名全部大寫 6 NAME = "xueweihan" 7 #得到NAME值 8 def get_NAME(): 9 return NAME 10 #重新設定NAME值 11 def set_NAME(name_value): 12 global NAME 13 NAME = name_value 14 print u"輸出全局變量NAME的值:",get_NAME() 15 new_name = "521xueweihan" 16 set_NAME(new_name)#為全局變量重新賦值 17 print u"輸出賦值完的全局變量NMAE的值:",get_NAME()
輸出結果:
輸出全局變量NAME的值: xueweihan
輸出賦值完的全局變量NMAE的值: 521xueweihan
9.or:表示邏輯“或”
10.with:和as一起用,使用的方法請看as,在上面!
11.assert:表示斷言(斷言一個條件就是真的,如果斷言出錯則拋出異常)用於聲明某個條件為真,如果該條件不是真的,則拋出異常:AssertionError
12.else:看下面if的解釋
13.if:if語句用於選擇分支,依據條件選擇執行那個語句塊。(這里多說一句:if語句中最好不要嵌套if語句,你可以把嵌套的if語句寫在另一個函數中)
if a > b: print "a > b elif a < b: print "a < b" else: print "a = b"
14.pass:pass的意思就是什么都不做。用途及理解:當我們寫一個軟件的框架的時候,具體方法啊,類啊之類的都不寫,等着后續工作在做。那么就在方法和類里面加上pass,那樣編譯起來就不會報錯了!就像這樣:
#理解pass的用途 def test_pass():pass #如果不加pass,拋出錯誤:IndentationError: expected an indented block test_pass()
15.yield:用起來和return很像,但它返回的是一個生成器。我這樣說不是很生動。我將會在下一節重點談一談關於Python中的yield,請先參考看下面的代碼:
1 #理解yield 2 def test_yield(n): 3 for i in range(n): 4 yield i*2#每次的運算結果都返回 5 6 for j in test_yield(8): 7 print j,":", 8 print u"結束理解yield" 9 #利用yield輸出斐波那契數列 10 ########## 11 def fab(max): 12 a,b = 0,1 13 while a < max: 14 yield a 15 a, b = b, a+b 16 print u"斐波那契數列!" 17 for i in fab(20): 18 print i,",",
輸出結果:
0 : 2 : 4 : 6 : 8 : 10 : 12 : 14 : 結束理解yield
斐波那契數列!
0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 ,
16.break:作用是終止循環,程序走到break的地方就是循環結束的時候。(有點強行終止的意思)注意:如果從for或while循環中終止(break)之后 ,else語句不執行。
17.except:和try一起使用,用來捕獲異常。
- try:
- block
- except [exception,[data…]]:
- block
- try:
- block
- except [exception,[data...]]:
- block
- else:
- block
該種Python異常處理語法的規則是:
◆執行try下的語句,如果引發異常,則執行過程會跳到第一個except語句。
◆如果第一個except中定義的異常與引發的異常匹配,則執行該except中的語句。
◆如果引發的異常不匹配第一個except,則會搜索第二個 except,允許編寫的except數量沒有限制。
◆如果所有的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。
◆ 如果沒有發生異常,則執行else塊代碼。
第一種格式:
#理解except try: num = 5/0 except: print u"計算出錯"
第二種:
1 try: 2 f = open("file.txt","r") #如果該文件不存在 3 except IOError, e: #捕獲IO異常 4 print u"IO錯誤!" 5 print e #輸出錯誤信息,這里e是錯誤信息
輸出結果:
計算出錯 IO錯誤! [Errno 2] No such file or directory: 'file.txt'
18.import:用來導入模塊,有時這樣用from....import
19.print:輸出
20.class:定義類
21exec:exec語句用來執行儲存在字符串或者文件中的python語句。可以生成一個包含python代碼的字符串,然后使用exec語句執行這些語句。
22.in:查找列表中是否包含某個元素,或者字符串a是否包含字符串b。需要注意的是:不可以查看list1是否包含list2。代碼如下:
1 #理解in 2 first_list = [1, 2] 3 second_list = [1, 2, 3] 4 element = 1 5 red = 'red' 6 red_clothes = "red clothes" 7 8 print red in red_clothes #true 9 print first_list in second_list #false 10 print element in first_list #true
輸出結果為:
True
False
True
23.raise:raise可以顯示地引發異常。一旦執行raise語句,后面的代碼就不執行了
#理解raise try: raise IOError #這里可以raise一個自定義的錯誤類。那樣就叫做自定義異常了 print u"是否執行?" #不執行 except IOError: print "IOError test raise"
輸出結果如下:
IOError test raise
24.continue:跳過continue后面循環塊中的語句,繼續進行下一輪循環。
25.finally:看到finally語句,必然執行finally語句的代碼塊。
python異常總結,請看下面的代碼:
One:
1 #打開一個文件,但有可能找不到 2 try: 3 f = open('xxx') 4 do something 5 except: 6 do something 7 finally: 8 f.close()
Two:
1 try: 2 f = open('xxx') 3 except: 4 print 'fail to open' 5 exit(-1) 6 try: 7 do something 8 except: 9 do something 10 finally: 11 f.close()
我們為什么要寫finally,是因為防止程序拋出異常最后不能關閉文件,但是需要關閉文件有一個前提就是文件已經打開了。
在第一段錯誤代碼中,如果異常發生在f=open(‘xxx’)的時候,比如文件不存在,立馬就可以知道執行f.close()是沒有意義的。改正后的解決方案就是第二段代碼。
26.is:Python中的對象包含三要素:id、type、value
其中id用來唯一標識一個對象,type標識對象的類型,value是對象的值
is判斷的是a對象是否就是b對象,是通過id來判斷的
==判斷的是a對象的值是否和b對象的值相等,是通過value來判斷的
1 #理解is 2 e = 1 3 es = 1.0 4 ess = 1 5 print u"""is就是比對id的值,看是否指向同一對象, 6 這里需要注意的是:同一對象,不是值相等就是同一對象。""" 7 print id(e) 8 print id(es) 9 print id(ess)
27.return:用於跳出函數,也可以在跳出的同時返回一個值。
28.def:用於定義方法
29.for:for....in 一起使用:它在一序列的對象上遞歸,就是遍歷隊列中的每個項目
30.lambda:即匿名函數,不用想給函數起什么名字。提升了代碼的簡潔程度。如:
1 #理解lambda 2 g = lambda :"lambda test." 3 print g() 4 num1 = lambda x, y=1:x + y 5 print num1(1) #多個變量的時候,可以不給有默認值的變量傳值 6 print num1(10,10) #值得注意的是,如果y沒有默認值而且不給它傳值的話報錯!
輸出結果:
lambda test. 2 20
31.try:出現在異常處理中,使用格式為:try...except,try中放想要執行的語句,except捕獲異常
到此本文已把所有的31個關鍵字進行了一個簡要的概述,后續文章我將會對其中比較重要的幾個關鍵字進行詳細的闡述說明理解,我也會盡我所能去進一步去對書中的概念進行深入理解,希望能夠總結出更好的文章分享給大家。
