1. 程式人生 > >第五章---面向過程編程

第五章---面向過程編程

lse 技術 定義函數 utf list dict sch action .com 編寫

編程範式(流派):
面向對象編程,面向過程編程 各有用處!!
編程:語法+數據結構(list dict)+算法(邏輯)

1.面向過程編程:核心是過程二字,過程指得是解決問題的步驟,相當於設計一條流水線,機械式的思維方式

優點:復雜的問題流程化,進而簡單化
缺點:可擴展性差
運用場景:系統監控腳本,自動部署腳本之類的,eg:軟件包解壓安裝(不再需要擴展了)就可以使用面向過程的思維編寫代碼



 1 ‘‘‘
 2 面向過程實例:用戶登錄註冊
 3 第一步:用戶輸入用戶名密碼
 4 第二步:檢查輸入的合法性
 5 第三步:註冊
 6 ‘‘‘
 7 
 8 import
json 9 def interaction(): # 用戶交互函數,用戶用戶輸入用戶名密碼 10 name = input(name:).strip() 11 pwd = input(pwd:).strip() 12 13 return {name:name, 14 pwd:pwd 15 } 16 17 def check(user_info): # 用戶校驗函數,用戶校驗用戶名密碼的合法性 18 is_legal = True 19 20 if len(user_info[name
]) == 0: 21 print(用戶姓名不能為空!) 22 is_legal = False 23 24 if len(user_info[pwd]) < 6: 25 print(用戶密碼不能少於6位!) 26 is_legal = False 27 return {is_legal:is_legal, 28 user_info:user_info 29 } 30 31 def register(check_info): # 註冊 32
if check_info[is_legal]: 33 with open(db.json,w,encoding=utf-8) as f: 34 json.dump(check_info[user_info],f) 35 36 def main(): 37 user_info = interaction() 38 check_info = check(user_info) 39 register(check_info) 40 41 if __name__ == __main__: 42 main()

2.面向對象:核心就是對象二字,對象就是特征與技能的結合體

優點:可擴展性強
缺點:編程復雜度高
應用場景:用戶需求經常變化,互聯網應用,遊戲,企業內部應用

技術分享圖片

類就是一系列對象相似的特征與技能的結合體
強調:站在不同的角度,得到的分類是不一樣的

在現實世界中:一定是先有對象,後又類
在程序中:一定先定義類,後調用類產生對象

站在路飛學院的角度,大家都是學生

在現實世界中:
對象1:mm
特征:
學校=‘luffycity‘
名字=‘mm‘
性別=‘女‘
年齡=18
技能:
學習
吃飯
睡覺

對象2:mumu
特征:
學校=‘luffycity‘
名字=‘mumu‘
性別=‘男‘
年齡=1
技能:
學習
吃飯
睡覺

對象3:zz
特征:
學校=‘luffycity‘
名字=‘zz‘
性別=‘男‘
年齡=20
技能:
學習
吃飯
睡覺

總結現實中路飛學院的學生類:
相似的特征
學校=‘luffycity‘

相似的技能
學習
吃飯
睡覺
 1  1 # 先定義類:
 2  2 class LuffyStudengt:
 3  3     school = luffycity
 4  4     def learn(self):
 5  5         print(is learning)
 6  6     def eat(self):
 7  7         print(is eating)
 8  8     def sleep(self):
 9  9         print(is sleepping)
10 10 
11 11 # 後產生對象
12 12 stu1 = LuffyStudengt()  # 實例化

3.如何使用類:

先定義類:
特征:變量 school
技能:函數

類和函數的區別:
定義函數只有調用函數名加()才執行
定義類的時候類的內部代碼都會執行

類的用途:
1.操作它的屬性 增刪改查
2.實例化 產生對象
 1 class LuffyStudengt:
 2     school = luffycity  # 數據屬性
 3     
 4     def learn(self):      # 函數屬性
 5         print(is learning)
 6     def eat(self):     # 函數屬性
 7         print(is eating)
 8     def sleep(self):    # 函數屬性
 9         print(is sleepping)
10 
11 # 查看類的名稱空間
12 print(LuffyStudengt.__dict__)
13 print(LuffyStudengt.__dict__[school])
14 
15 # 查:
16 print(LuffyStudengt.school) # == print(LuffyStudengt.__dict__[‘school‘])
17 
18 # 增:
19 LuffyStudengt.country = China
20 print(LuffyStudengt.__dict__)
21 
22 #
23 del LuffyStudengt.country
24 print(LuffyStudengt.__dict__)
25 
26 #
27 LuffyStudengt.school = Luffycity
28 print(LuffyStudengt.__dict__)

4.__init__方法

__init__方法用來為對象定制對象自己獨有的特征

__init__實例化對象時會自動調
 1 class LuffyStudengt:
 2     school = luffycity
 3 
 4     # stu1,‘mm‘,‘女‘,18
 5     def __init__(self,name,sex,age):
 6         self.Name = name
 7         self.Sex = sex
 8         self.Age = age
 9 
10     def learn(self):
11         print(is learning)
12     def eat(self):
13         print(is eating)
14     def sleep(self):
15         print(is sleepping)
16 
17 # 後產生對象
18 stu1 = LuffyStudengt(mm,,18)  # 實例化
19 
20 # 加上__init__方法後實例化的步驟
21 # 1.先產生一個空對象stu1
22 # 2.LuffyStudent.__init__(stu1,‘mm‘,‘女‘,18)
23 
24 #
25 print(stu1.__dict__)
26 print(stu1.Name)
27 
28 # 改:
29 stu1.Name = 夢夢
30 print(stu1.__dict__)
31 print(stu1.Name)
32 
33 # 刪除:
34 del stu1.Name
35 print(stu1.__dict__)
36 
37 # 增:
38 stu1.classname = python全站開發
39 print(stu1.__dict__)
40 
41 stu2=LuffyStudent(mumu,,1) #Luffycity.__init__(stu2,‘mumu‘,‘男‘,1)
42 print(stu2.__dict__)
43 print(stu2.Name)

5.屬性查找與綁定方法

 1 class LuffyStudengt:
 2     school = luffycity
 3 
 4     # stu1,‘mm‘,‘女‘,18
 5     def __init__(self,name,sex,age):
 6         self.Name = name
 7         self.Sex = sex
 8         self.Age = age
 9 
10     def learn(self):
11         print(%s is learning% self.Name)
12     def eat(self):
13         print(%s is eating% self.Name)
14     def sleep(self):
15         print(%s is sleepping% self.Name)
16 
17 # 後產生對象
18 stu1 = LuffyStudengt(mm,,18)  # 實例化
19 stu2 = LuffyStudengt(mumu,,1)
20 stu3 = LuffyStudengt(zz,,20)
21 
22 # 對象:特征和技能的結合體
23 # 類:類是一系列對象相似的特征與相似的技能的結合體
24 
25 # 類中的數據屬性:是所有對象共有的
26 # print(stu1.school,id(stu1.school))
27 # print(stu2.school,id(stu2.school))
28 # print(stu3.school,id(stu3.school))
29 #
30 # # luffycity 6854800
31 # # luffycity 6854800
32 # # luffycity 6854800
33 # 類中的函數屬性:是綁定給對象使用的,綁定到不同的對象是不同的綁定方法
34 # 對象調用綁定方法時,會把對象本身當做第一個參數傳入,傳給self
35 # print(LuffyStudengt.learn)
36 # LuffyStudengt.learn(stu1)
37 
38 # print(stu1.learn)
39 # stu1.learn()
40 # print(stu2.learn)
41 # print(stu3.learn)
42 
43 # 變量查找順序:首先會在對象的名稱空間中找,找不到在去類的名稱空間找,然後去父類的名稱空間找,還找不到就不會去全局找了
44 stu1.x = from stu1
45 LuffyStudengt.x = from LuffyStudent
46 
47 print(stu1.x)
48 # from stu1

6.補充知識
1.站的角度不同,定義出的類是截然不同的;
2.現實中的類並不完全等於程序中的類,比如現實中的公司類,在程序中有時需要拆分成部門類,業務類等;
3.有時為了編程需求,程序中也可能會定義現實中不存在的類,比如策略類,現實中並不存在,但是在程序中卻是一個很常見的類。

4.python 一切皆對象,在python3裏統一了類與類型(list dict)的概念
 1 # print(type([1,2]))
 2 # print(list)
 3 class LuffyStudent:
 4     school = luffycity
 5 
 6     def __init__(self,name,sex,age):
 7         self.Name=name
 8         self.Sex=sex
 9         self.Age=age
10 
11     def learn(self,x):
12         print(%s,%s is learning % (self.Name,x))
13 
14     def eat(self):
15         print(%s is eatting % self.Name)
16 # print(LuffyStudent)
17 
18 li1 = [1,2,3] # li = list(1,2,3) # list 對象
19 li1.append(4) # 對象在調自己的綁定方法 # list.append(li1,4)
20 # list.append(li1,4) # 類中的方法 是給 對象用的
21 print(li1)

7.可擴展性高
 1 class Chinese:
 2     country = China
 3     def __init__(self,name,age,sex):
 4         self.name=name
 5         self.age=age
 6         self.sex=sex
 7     def eat(self):
 8         print(%s is eating % self.name)
 9 
10 p1 = Chinese(alice,19,)
11 p2 = Chinese(alex,22,)
12 
13 print(p1.name,p1.country)
14 print(p2.name,p2.country)
15 p1.eat()
16 p2.eat()

 

第五章---面向過程編程