1. 循環 if, while, for
break : 結束整個循環
continue :跳出當前此次循環,但不結束整個循環
else :結束整個循環後才執行,不能與break合用,但能夠與continue合用。python
2. bool 惰性求值,從左到右判斷,只要出現一個false就返回。編程
3. 打開文件app
1 # 經常使用方法 2 # 打開文件test.txt 3 file = open('test.txt', 'r') 4 # 讀取文件 5 file.read() 6 # 關閉文件 7 file.close() 8 9 # with 方法(系統自動會關閉文件) 10 with open('test.txt', 'r') as f: 11 file = f.read() 12 13 ''' 14 with 工做機制分析 15 打開文件時,調用對象 test 的 __enter__方法 16 關閉文件時,調用對象 test 的 __exit__方法 17 分析以下 18 ''' 19 class test(object): 20 def __init__(self, args): 21 self.args = args 22 def __enter__(self): 23 print('I am come in now') 24 return self.args 25 def __exit__(self, type, value, traceback): 26 print('I am come out now') 27 with test('hello men') as f: 28 # 返回 __enter__ 方法 return 的值 29 print(f)
4. 斷言
# 斷言是一種開發時期檢驗代碼的方式,只斷言絕對不能出現的錯誤。
assertdom
# 格式:
# assert 表達式,"出錯後拋出異常信息"
# 默認返回Trueide
5. 異常處理函數
1 ''' 2 1. 儘可能一個try就用一個except 3 2. 慎用異常: 4 1) 找到python內置異常 5 2)理解python的內置異常分別對應什麼狀況 6 3)閱讀你的代碼,找到你的代碼裏可能會拋出異常的地方 7 4)僅對小部分代碼進行異常處理 8 ''' 9 try: 10 '''有可能拋出異常的代碼''' 11 print('test') 12 except: 13 '''try裏面的代碼拋出異常就執行except代碼塊裏的代碼''' 14 print('error') 15 else: 16 '''tyr代碼塊裏的代碼若是沒有拋出異常就執行else代碼塊裏的代碼''' 17 print('hello') 18 finally: 19 '''無論如何,finally裏的代碼總會被執行''' 20 print('hai') 21 ''' 22 異常應用方法 23 1.(在已知異常的前提下)捕獲正確的異常,不要直接 try except 24 2.異常的處理,要有日誌。 25 ''' 26 27 '''日誌的使用''' 28 import logging 29 # 實例化一個logger對象 30 logger = logging.getLogger() 31 # 指定日誌文件存儲路徑 32 hdlr = logging.FileHandler('/tmp/testlog.txt') 33 # 格式化日誌輸出格式 34 formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 35 # 傳入格式到日誌對象logger 36 hdlr.setFormatter(formatter) 37 # 傳入文件到日誌對象logger 38 logger.addHandler(hdlr) 39 # 生成日誌等級 40 logger.setLevel(logging.NOTSET) 41 # 生成debug日誌等級 42 logger.debug('This is a debug message') 43 # 生成error日誌等級 44 logger.error('This is a error message')
6. 函數spa
1 #函數要有返回值,return 2 #寫函數文檔,doc('''函數說明文檔'''),如: 3 def test(a = 666): 4 '''函數說明文檔''' 5 return a 6 print(test.__doc__) 7 print(test()) 8 ''' 9 變量做用域,先看函數局部變量,若是沒有再找全局變量。 10 11 函數參數(順序排列):必選參數, 默認參數, 可變參數, 關鍵字參數。 12 必選參數, a # 沒有默認值 13 默認參數, b = 1 # 有默認值(在調用時能夠從新賦值),在某種狀況降低低函數的難度。 14 可變參數, *args # args 接收的是一個tuple。 15 關鍵字參數, **kwargs # kwargs 接收的是一個dict。 16 如: 17 ''' 18 def test(a, b = 1, *args, **kwargs): 19 return a, b, args, kwargs 20 print(test(1,2,3,[1,2,3],aa=1,bb=2,cc=3)) 21 22 ''' 23 判斷傳入參數的數據類型: 24 isinstance(傳入的參數, 數據類型),如: 25 判斷傳入參數是否是int類型,若是是就存進list,不然pass。 26 ''' 27 def func(*a): 28 list = [] 29 for b in a: 30 if isinstance(b, int): 31 list.append(b) 32 else: 33 pass 34 return b 35 print(func(1,2,'d','f',3,'panisme',666)) 36 37 # lambda 表達式 ,如: 38 a = [1,2,3,4,5,6] 39 b = filter(lambda x :x!=5,a) # 下面是等價表達 40 # 分析過程: 41 b = [] 42 for x in a: 43 if x != 5: 44 b.append(x)
5. 面向對象編程debug
1 ''' 2 構造函數,初始化類方法內部變量,給整個類方法使用。 3 def __init__(self, args): 4 self.args = args 5 析構函數,銷燬類方法內部變量,減小內存使用。 6 def __del__(self): 7 del self.args 8 ''' 9 class ClassName(object): 10 """docstring for ClassName""" 11 def __init__(self, arg): 12 super(ClassName, self).__init__() # 使用 super 方法繼承某個類,優勢是可直接使用該類的構造函數。 13 self.arg = arg 14 @staticmethod # 靜態方法的裝飾(好處以下)。 15 def function(): 16 pass 17 print(ClassName.function()) # 不用實例化一個對象,直接把類裏的方法當成屬性來用 18 19 '''類的繼承''' 20 import random as r 21 class Fish: 22 def __init__(self): 23 self.x = r.randint(0,10) 24 self.y = r.randint(0,10) 25 def move(self): 26 self.x -= 1 27 print('個人位置是:', self.x, self.y) 28 class Goldfish(Fish): 29 pass 30 class Carp(Fish): 31 pass 32 class salmon(Fish): 33 pass 34 class Shark(Fish): 35 def __init__(self): 36 # 直接重寫Fish父類,其中self是子類中的self 37 #Fish.__init__(self) 38 # 使用super()函數重寫Fish父類,不須要傳參進來;之後要改用繼承的類,直接在子類中修改父類名便可 39 super().__init__() 40 self.hungry = True 41 def eat(self): 42 if self.hungry: 43 print("吃貨的夢想就是每天吃^_^") 44 self.hungry = False 45 else: 46 print("太撐了,吃不下了!") 47 # 實例化一條魚,生成一個fish對象 48 fish = Fish() 49 # 調用fish對象(魚)的move方法 50 fish.move() 51 goldfish = Goldfish() 52 goldfish.move() 53 goldfish.move() 54 shark = Shark() 55 shark.move() 56 shark.eat() 57 shark.eat() 58 59 '''類的多重繼承''' 60 class Base1: 61 def foo1(self): 62 print("我是foo1,我爲Base1代言...") 63 class Base2: 64 def foo2(self): 65 print("我是foo2,我爲Base2代言...") 66 # 多重繼承父類,此例繼承了Base1和Base2 67 class C(Base1, Base2): 68 pass 69 c = C() 70 c.foo1() 71 c.foo2()