今天依舊在啃:《笨方法學python》,其中習題37是復習各種關鍵字。我本想百度一下記一下就ok了,但是百度出來第一個就Hongten的博客。我才意識到我也有博客,我應該學習他,把這些積累的東西都放到博客中。
主要參考:http://www.cnblogs.com/hongten/p/hongten_python_keywords.html#undefinedpython2.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__()方法。示例如下:
class Sample: def __enter__(self): print "In __enter__()"
return "Foo"
def __exit__(self, type, value, trace): print "In __exit__()"
def get_sample(): return Sample() with get_sample() as sample: print "sample:", sample
輸出結果:
In __enter__() sample: Foo In __exit__()
第一步: __enter__()方法被執行
第二步: __enter__()方法返回的值 - 這個例子中是"Foo",賦值給變量'sample'
第三步:執行代碼塊,打印變量"sample"的值為 "Foo"
第四步: __exit__()方法被調用with真正強大之處是它可以處理異常。可能你已經注意到Sample類的__exit__方法有三個參數- val, type 和 trace。這些參數在異常處理中相當有用。
你也可以參考這里:http://zhoutall.com/archives/3257.elif :和if配合使用的,if語句中的一個分支用elif表示。
8.global :定義全局變量,我的理解就是:要想給全局變量重新賦值,就要global一下全局變量(相當於告訴你:哦,注意了!下面我要設定全局變量的值的),之后在重新賦值。示例如下:
#coding:utf-8 ################# #習題37:復習各種符號 ################# #前言 #
#熟悉global
#定義全局變量,變量名全部大寫
NAME = "xueweihan"
#得到NAME值
def get_NAME(): return NAME #重新設定NAME值
def set_NAME(name_value): global NAME NAME = name_value print u"輸出全局變量NAME的值:",get_NAME() new_name = "521xueweihan" set_NAME(new_name)#為全局變量重新賦值
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(最后寫的那個斐波那契,我覺得他就是大神),或者請看下面的代碼:
#理解yield
def test_yield(n): for i in range(n): yield i*2#每次的運算結果都返回
for j in test_yield(8): print j,":", print u"結束理解yield"
#利用yield輸出斐波那契數列 ########## #看這里,太厲害了,不是我寫的。。。。 ##########
def fab(max): a,b = 0,1
while a < max: yield a a, b = b, a+b print u"斐波那契數列!"
for i in fab(20): 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"計算出錯"
第二種:
try: f = open("file.txt","r") #如果該文件不存在
except IOError, e: #捕獲IO異常
print u"IO錯誤!"
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。代碼如下:
#理解in
first_list = [1, 2] second_list = [1, 2, 3] element = 1 red = 'red' red_clothes = "red clothes"
print red in red_clothes #true
print first_list in second_list #false
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:
#打開一個文件,但有可能找不到
try: f = open('xxx') do something except: do something finally: f.close()
Two:
try: f = open('xxx') except: print 'fail to open' exit(-1) try: do something except: do something finally: f.close()
我們為什么要寫finally,是因為防止程序拋出異常最后不能關閉文件,但是需要關閉文件有一個前提就是文件已經打開了。
在第一段錯誤代碼中,如果異常發生在f=open(‘xxx’)的時候,比如文件不存在,立馬就可以知道執行f.close()是沒有意義的。改正后的解決方案就是第二段代碼。
26.is :Python中的對象包含三要素:id、type、value
其中id用來唯一標識一個對象,type標識對象的類型,value是對象的值
is判斷的是a對象是否就是b對象,是通過id來判斷的
==判斷的是a對象的值是否和b對象的值相等,是通過value來判斷的
#理解is
e = 1 es = 1.0 ess = 1
print u"""is就是比對id的值,看是否指向同一對象, 這里需要注意的是:同一對象,不是值相等就是同一對象。"""
print id(e) print id(es) print id(ess)
27.return:用於跳出函數,也可以在跳出的同時返回一個值。
28.def :用於定義方法
29.for :for....in 一起使用:它在一序列的對象上遞歸,就是遍歷隊列中的每個項目
30.lambda:即匿名函數,不用想給函數起什么名字。提升了代碼的簡潔程度。如:
#理解lambda
g = lambda :"lambda test."
print g() num1 = lambda x, y=1:x + y print num1(1) #多個變量的時候,可以不給有默認值的變量傳值
print num1(10,10) #值得注意的是,如果y沒有默認值而且不給它傳值的話報錯!
輸出結果:
lambda test. 2
20
31.try :出現在異常處理中,使用格式為:try...except,try中放想要執行的語句,except捕獲異常
代碼見,25.
ok了,我要斷電了,有幾點沒懂地方明天補全。邊學邊寫,寫了一下午 T.T
終於完成了,在寫這篇博客的過程中我學習到了很多:有些知道什么意思的語句,但是就是不會用自己的話說,參考了別人的博客之后。能夠順利的表達明白了。寫博客真的很漲知識啊!