初始python(三)

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)
View Code

 

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')
View Code

 

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)
View Code

 

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()
View Code
相關文章
相關標籤/搜索