文章目錄
- 一.引言
- 二.為什么要學python,怎么學
- 1.為什么學
- 2.怎么學
- 三.python
- 1.基礎語法
- (1)hello world!
- (2)輸入輸出函式
- (3)注釋和雙引號
- (4)關鍵字
- 2.資料型別
- 3.控制陳述句與回圈
- 4.序列:字串,串列,元組
- 5.映像和集合型別:字典,集合
- 6.函式
- (1)函式的定義
- (2)函式的使用
- 7.面向物件的編程思想——類和物件
- (1).面向物件編程介紹
- (2)類和物件
- (3).類的構成
- (4)定義類 和 創建物件
- (5)物件屬性獲取
- 8.檔案操作——輸入和輸出
- (1)打開檔案
- (2)讀檔案
- (3)寫檔案
- (4)關閉檔案
- 9.模塊,包,庫,框架
- 10.面向物件編程
- (1)類的創建宣告與定義
- (2)類屬性
- (3)實體化
- (4)實體屬性
- (5)子類和繼承,多重繼承
恭喜各位同學進入了下一階段的培訓
一.引言
python是動態語言,是既面向物件又面向程序的語言,
二.為什么要學python,怎么學
1.為什么學
2.怎么學
和c語言有很大不同的是,python擁有很多拿來即用的自帶庫和拓展庫,
比如資料分析會使用到numpy,matplotlib,pandas等
爬蟲會用到requests,beautifulsoup4等
連接資料庫會用到pymysql,sqllite3等
深度學習和機器學習會用到tensorflow,pytorch,sklearn等
三.python
1.基礎語法
(1)hello world!
print("hello world")
(2)輸入輸出函式
(3)注釋和雙引號
(4)關鍵字
| 關鍵字 | 含義 |
|---|---|
| False | 布爾型別的值,表示與 True 相反 |
| None | None 比較特殊,表示什么也沒有,它有自己的資料型別 - None Type |
| True | 布爾型別的值,表示真,與 False相反 |
| and | 用于運算式運算,邏輯與操作 |
| as | 用于型別轉換 |
| assert | 斷言,用于判斷變數或者表示式的值是否為真 |
| break | 中斷回圈陳述句的執行 |
| class | 用于定義類 |
| continue | 跳出本次回圈,繼續執行下一次回圈 |
| def | 用于定義函式或方法 |
| del | 洗掉變數或序列的值 |
| elif | 條件陳述句,與 if、else 結合使用 |
| else | 條件陳述句,與 if、else 結合使用;也可以用于例外或回圈陳述句 |
| except | except 包含捕獲例外后的操作代碼塊,與 try、finally 結合使用 |
| finally | 用于例外陳述句,出現例外后,始終要執行 finally 包含的代碼塊,與 try、except 結合使用 |
| for | for 回圈陳述句 |
| from | 用于匯入模塊,與 import 結合使用 |
| global | 定義全域變數 |
| if | 條件陳述句,與 else、elif 結合使用 |
| import | 用于匯入模塊,與 from 結合使用 |
| in | 判斷變數是否在序列中 |
| is | 判斷變數是否為某個類的實體 |
| lambda | 定義匿名函式 |
| nonlocal | 用于表示外部作用域的變數 |
| not | 用于運算式運算,邏輯非操作 |
| or | 用于運算式運算,邏輯或操作 |
| pass | 空的類、方法或函式的占位符 |
| raise | 例外拋出操作 |
| return | 用于從函式回傳計算結果 |
| try | try 包含可能會出現例外的陳述句,與 except、finally 結合使用 |
| while | while 回圈陳述句 |
| with | 簡化 Python陳述句 |
| yield | 用于從函式一次回傳值 |
2.資料型別
Python3 中有六個標準的資料型別:
-
number(數字)
-
string(字串)
-
tuple(元組)
-
list(串列)
-
set(集合)
-
dictionary(字典)
3.控制陳述句與回圈
for 迭代器 in 集合:
操作
4.序列:字串,串列,元組
5.映像和集合型別:字典,集合
6.函式
(1)函式的定義
(2)函式的使用
7.面向物件的編程思想——類和物件
(1).面向物件編程介紹
·如今主流的軟體開發思想有兩種:一個是面向程序,另一個是面向物件,面向程序出現得較早,典型代表為C語言,開發中小型專案的效率很高,但是很難適用于如今主流的大中型專案開發場景,面向物件則出現得更晚一些,典型代表為Java或C++等語言,更加適合用于大型開發場景,兩種開發思想各有長短,
·對于面向程序的思想: 需要實作一個功能的時候,看重的是開發的步驟和程序,每一個步驟都需要自己親力親為,需要自己撰寫代碼(自己來做)
對于面向物件的思想:當需要實作一個功能的時候,看重的并不是程序和步驟,而是關心誰幫我做這件事(偷懶,找人幫我做)
·面向物件的三大特征有: 封裝性、繼承性、多型性,
生活舉例
洗衣服
面向程序(手洗): 脫衣服、找一個盆、加水、加洗衣粉、浸泡30分鐘、搓洗、擰衣服、倒掉水、再加水、漂洗、擰衣服、倒掉水、晾衣服,
面向物件(機洗): 脫衣服、放入洗衣機、按下開關、拿出衣服晾曬,
買電腦
面向程序(自己買): 需要電腦、查詢引數資訊、橫向比較機型、了解打折資訊、與店家討價還價、下單、收快遞、開機驗貨、確認識訓,
面向物件(找人買): 需要電腦、找秘書幫我買、收電腦,
(2)類和物件
-
`物件是面向物件編程的核心,在使用物件的程序中,為了將具有共同特征和行為的一組物件抽象定義,提出了另外一個新的概念——類
-
面向物件的語言當中,“類”就是用來模擬現實事物的,
-
類:抽象的,是一張“手機設計圖”, -
物件:具體的,是一個“真正的手機實體”,

-
小結: 類是抽象的,在使用的時候通常會找到這個類的一個具體的存在,使用這個具體的存在,一個類可以找到多個物件,
這一部分不是短時間內就可以完全理解的,需要在實際操作中慢慢體會
人以類聚 物以群分,
具有相似內部狀態和運動規律的物體的集合(或統稱為抽象),
具有相同屬性和行為事物的統稱
- 類就相當于制造飛機時的圖紙,用它來進行創建的飛機就相當于物件
類是一類事物,物件即是這類事物實作

- 類中也有屬性、行為兩個組成部分,而“物件”是類的具體實體
- 屬性: 事物的特征描述資訊,用于描述某個特征“是什么”,
- 行為: 事物的能力行動方案,用于說明事物“能做什么”,
(3).類的構成
類(Class) 由3個部分構成
- 類的名稱:類名
- 類的屬性:一組資料
- 類的方法:允許對進行操作的方法 (行為)
案例:如下植物大戰僵尸可以抽象為幾個類

向日葵
類名: xrk
屬性: 顏色
行為: 放陽光 死亡
豌豆
類名: wd
屬性: 顏色 、發型,血量
行為:發炮, 搖頭 死亡
堅果:
類名:jg
屬性:血量 型別
行為:阻擋;死亡
僵尸: 類名:js
屬性:顏色、血量、 型別、速度
行為:走 跑跳 吃 死亡
(4)定義類 和 創建物件
- 定義一個類,格式如下:
class 類名:
方法串列
- demo:定義一個Hero類
# class Hero: # 經典類(舊式類)定義形式
# class Hero():
class Hero(object): # 新式類定義形式
def info(self):
print("英雄各有見,何必問出處,")
- 說明:
- ①定義類時有2種形式:新式類和經典類,上面代碼中的Hero為新式類,前兩行注釋部分則為經典類;
- ②object 是Python 里所有類的最頂級父類;
- ③類名 的命名規則按照"大駝峰命名法";
- ④info 是一個實體方法,第一個引數一般是self,表示實體物件本身,當然了可以將self換為其它的名字,其作用是一個變數這個變數指向了實體物件
python中,可以根據已經定義的類去創建出一個或多個物件,
創建物件的格式為:
物件名1 = 類名()
物件名2 = 類名()
物件名3 = 類名()
創建物件demo:
class Hero(object): # 新式類定義形式
"""info 是一個實體方法,類物件可以呼叫實體方法,實體方法的第一個引數一定是self"""
def info(self):
"""當物件呼叫實體方法時,Python會自動將物件本身的參考做為引數,
傳遞到實體方法的第一個引數self里"""
print(self)
print("self各不同,物件是出處,")
# Hero這個類 實體化了一個物件 taidamier(泰達米爾)
taidamier = Hero()
# 物件呼叫實體方法info(),執行info()里的代碼
# . 表示選擇屬性或者方法
taidamier.info()
print(taidamier) # 列印物件,則默認列印物件在記憶體的地址,結果等同于info里的print(self)
print(id(taidamier)) # id(taidamier) 則是記憶體地址的十進制形式表示
<__main__.Hero object at 0x036EB0D0>
self各不同,物件是出處,
<__main__.Hero object at 0x036EB0D0>
57585872
小結:當創建一個物件時,就是用一個模子,來制造一個實物
(5)物件屬性獲取
物件既然有實體方法,是否也可以有自己的屬性?
添加和獲取物件的屬性
class Hero(object):
"""定義了一個英雄類,可以移動和攻擊"""
def move(self):
"""實體方法"""
print("正在前往事發地點...")
def attack(self):
"""實體方法"""
print("發出了一招強力的普通攻擊...")
# 實體化了一個英雄物件 泰達米爾
taidamier = Hero()
# 給物件添加屬性,以及對應的屬性值
taidamier.name = "泰達米爾" # 姓名
taidamier.hp = 2600 # 生命值
taidamier.atk = 450 # 攻擊力
taidamier.armor = 200 # 護甲值
# 通過.成員選擇運算子,獲取物件的屬性值
print("英雄 %s 的生命值 :%d" % (taidamier.name, taidamier.hp))
print("英雄 %s 的攻擊力 :%d" % (taidamier.name, taidamier.atk))
print("英雄 %s 的護甲值 :%d" % (taidamier.name, taidamier.armor))
# 通過.成員選擇運算子,獲取物件的實體方法
taidamier.move()
taidamier.attack()
英雄 泰達米爾 的生命值 :2600
英雄 泰達米爾 的攻擊力 :450
英雄 泰達米爾 的護甲值 :200
正在前往事發地點...
發出了一招強力的普通攻擊...
物件創建并添加屬性后,能否在類的實體方法里獲取這些屬性呢?如果可以的話,應該通過什么方式?
在方法內通過self獲取物件屬性
class Hero(object):
"""定義了一個英雄類,可以移動和攻擊"""
def move(self):
"""實體方法"""
print("正在前往事發地點...")
def attack(self):
"""實體方法"""
print("發出了一招強力的普通攻擊...")
def info(self):
"""在類的實體方法中,通過self獲取該物件的屬性"""
print("英雄 %s 的生命值 :%d" % (self.name, self.hp))
print("英雄 %s 的攻擊力 :%d" % (self.name, self.atk))
print("英雄 %s 的護甲值 :%d" % (self.name, self.armor))
# 實體化了一個英雄物件 泰達米爾
taidamier = Hero()
# 給物件添加屬性,以及對應的屬性值
taidamier.name = "泰達米爾" # 姓名
taidamier.hp = 2600 # 生命值
taidamier.atk = 450 # 攻擊力
taidamier.armor = 200 # 護甲值
# 通過.成員選擇運算子,獲取物件的實體方法
taidamier.info() # 只需要呼叫實體方法info(),即可獲取英雄的屬性
taidamier.move()
taidamier.attack()
英雄 泰達米爾 的生命值 :2600
英雄 泰達米爾 的攻擊力 :450
英雄 泰達米爾 的護甲值 :200
正在前往事發地點...
發出了一招強力的普通攻擊...
8.檔案操作——輸入和輸出
(1)打開檔案
在python中使用open函式即可打開檔案
f = open(‘test.txt’,’w’)
訪問模式
| 訪問模式 | 說明 |
|---|---|
| r | 以只讀方式打開檔案,檔案的指標將會放在檔案的開頭,這是默認模式, |
| w | 打開一個檔案只用于寫入,如果該檔案已存在則將其覆寫,如果該檔案不存在,創建新檔案, |
| a | 打開一個檔案用于追加,如果該檔案已存在,檔案指標將會放在檔案的結尾,也就是說,新的內容將會被寫入到已有內容之后,如果該檔案不存在,創建新檔案進行寫入, |
| rb | 以二進制格式打開一個檔案用于只讀,檔案指標將會放在檔案的開頭,這是默認模式, |
| wb | 以二進制格式打開一個檔案只用于寫入,如果該檔案已存在則將其覆寫,如果該檔案不存在,創建新檔案, |
| ab | 以二進制格式打開一個檔案用于追加,如果該檔案已存在,檔案指標將會放在檔案的結尾,也就是說,新的內容將會被寫入到已有內容之后,如果該檔案不存在,創建新檔案進行寫入, |
| r+ | 打開一個檔案用于讀寫,檔案指標將會放在檔案的開頭, |
| w+ | 打開一個檔案用于讀寫,如果該檔案已存在則將其覆寫,如果該檔案不存在,創建新檔案, |
| a+ | 打開一個檔案用于讀寫,如果該檔案已存在,檔案指標將會放在檔案的結尾,檔案打開時會是追加模式,如果改檔案不存在,創建新檔案用于讀寫, |
| rb+ | 以二進制格式打開一個檔案用于讀寫,檔案指標將會放在檔案的開頭 |
| wb+ | 以二進制格式打開一個檔案用于讀寫,如果改檔案已存在則會覆寫,如果改檔案不存在,創建新檔案, |
| ab+ | 以二進制格式打開一個檔案用于追加,如果該檔案已存在,檔案指標將會放在檔案的結尾,如果改檔案不存在,創建新檔案用于讀寫, |
(2)讀檔案
使用write()可以完后向檔案寫入資料
示例
#寫
f = open("test.txt","w") #打開檔案,w模式(寫模式),檔案不存在就新建
f.write("hello world,I am here!") #將字串寫入檔案中
f.close() #關閉檔案
(3)寫檔案
(4)關閉檔案
#新建一個檔案,檔案名為:test.txt
f = open(“text.txt”,”w”)
f.colse()#關閉這個檔案
9.模塊,包,庫,框架
(1)模塊:是一個單獨的.py檔案,用于存放一些功能相關的代碼,可以是代碼更加容易維護,提高代碼的重用價值
(2)包:是一個有層級的目錄結構,包含n個模塊或者n個子包,包中一定要有__init__.py檔案
(3)庫:是完成一定功能的代碼集合,表現形式是一個模塊,或包
(4)框架:是一個架構層面的概念,為解決一個開放性問題而設計的具有一定約束性的支撐結構,通過框架可以快速實作一個解決問題的骨架,后面按照框架中的角色去填充和互動,就可以完成質量高,維護性強的專案
(5)包和模塊的作用:1.有效的對程式進行分解,方便代碼的管理和維護,如造一輛車,就得先造好輪子、發動機和殼等小的零件,再將這些小零件組合,就可以做成車,同樣,拿模塊和包過來就可以則合成大的程式;2.避免同一模塊中命名重復問題
關于包和模塊的分類
(1)標準包和模塊:安裝python后自動下載在電腦中的包和模塊,可以直接匯入使用,滿足用戶基本的需求;其中有一些特殊的包和模塊–內建包和模塊,如builtins模塊,其中包含了很多如print這樣的常用的方法,所以內建包和模塊不需要匯入就可以直接使用
(2)三方包和模塊:別的程式員開發的包和模塊,需要用戶手動去相關網站上下載安裝,然后進行匯入使用
(3)自定義包和模塊:用戶自己寫的一些好的包和模塊
關于包和模塊的資訊
(1)包和模塊名:包名是包的名稱,模塊名是.py檔案的名稱
(2)包和模塊位置:可以通過“print(模塊.file)”來查看包和模塊的位置資訊
(3)包和模塊中的內容:可以通過“print(dir(模塊))”來查看列出的包和模塊中的內容
關于python不同版本之間不兼容的問題
(1)不兼容物件:包和模塊
(2)不兼容原因:包和模塊中存在一些類,函式和屬性等,如果有兩個版本,1.f前者有一個名為a的函式,而后者沒有;2兩者都有名為b的函式,但前者只傳一個引數,后者要傳兩個引數;3.前者本來沒有名為c的函式,但后者卻有,這些情況都將導致兩個版本的python不兼容
關于包和模塊的匯入(重點)
(1)作用:可以使用包和模塊中的好的模塊和方法等工具
(2)包的匯入方式
常規匯入:方式1.import M;方式2.import M1,M2;方式3.import M as 別名,如果匯入的是一個包中的模塊,則需要使用“.”語法,如import 包.模塊
注意:使用匯入的模塊中的內容時,要使用“.”語法,如M.run(),即使用匯入的M模塊中的run()方法
補充:直接匯入一個包,則不會匯入任何包中的模塊,但是會執行包中的__init__.py檔案的內容,這里的解決方法是1.再在__init__.py檔案中對需要的模塊進行匯入(使用絕對路徑);2.使用from 包 import 模塊的形式進行匯入
from A import B:使用此方式匯入模塊時,B一定只能寫一個模塊名,不能帶有“.”語法,而A可以是一個包,也可以是包中的子包,可以使用“.”語法,如from 包.子包 import 模塊,這里需要注意的是python中的一種面向關系,即包中只能看到模塊,不能看到模塊中的資源,而模塊只能看見其中的資源,不能看見別的東西
from A import *(重點):這種匯入方式如果是將模塊中的所用資源匯入過來使用,那么這里的A只能是模塊;如果A是包,則是將該包中所有的模塊都匯入進來,需要注意的是,這里有兩種特殊情況,1.在A模塊中使用__all__=[“a”,“b()”]屬性時,則使用from A import *進行匯入后就只能使用串列中寫的屬性和方法,如果沒有寫__all__=[“a”,“b()”]屬性,則默認可以使用A中所有的資源;2.如果A中存在受保護的或者私有的資源,則必須使用__all__=["_a","__b()"]屬性進行說明,否則直接使用from A import *進行匯入后,仍然無法使用這些資源
————————————————
著作權宣告:本文為CSDN博主「醍醐三葉」的原創文章,遵循CC 4.0 BY-SA著作權協議,轉載請附上原文出處鏈接及本宣告,
原文鏈接:https://blog.csdn.net/zx870121209/article/details/81515649
10.面向物件編程
(1)類的創建宣告與定義
(2)類屬性
(3)實體化
(4)實體屬性
(5)子類和繼承,多重繼承
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333616.html
標籤:其他
上一篇:【chrome插件開發】程式猿節來臨,我卻被這廣告給氣到了
下一篇:訊息中間件之RabbitMQ
