python全棧開發
阿新 • • 發佈:2022-12-09
必備常識
硬體組成
進位制轉換
註釋
基本資料型別
變數
整型(int)
浮點型(float)
字串(str)
列表(list)
元組(tuple)
字典(dict)
集合(set)
流程控制
if 條件語句
for 迴圈
while 迴圈
函式
定義和呼叫
-
定義
- 功能會重複使用、或者程式碼量較多的時候,定義成函式 - 基本語法 def 函式名(引數列表): 函式體 - 呼叫 函式名() - 函式定義時不執行函式體,只有當呼叫函式的時候才會執行。因此,只要符合函 數的定義形式,只要不呼叫函式,即便函式體內由語法錯誤或者邏輯錯誤,執行 程式也不會報錯。 # ############################################################ #函式定義與呼叫 def func1(): print("HelloWorld") func1() #列印HelloWorld #定義不執行,呼叫才執行 def func2(): pri("HelloWorld") #有語法錯誤 #func2() #呼叫時,才報錯
-
引數
- 引數就是變數在函式中的特殊稱謂,引數根據實際情況定義 - 形式引數(形參):在函式定義的時候,緊跟在函式名後的變數,相當於數學函 數中的自變數,只起到表示的作用,方便在函式體中使用,沒有具體的值。 - 實際引數(實參):在函式呼叫的時候,形式引數被賦值後,叫做實際引數,相 當於數學函式中的自變數被賦予具體的值後的名稱。 - 傳參:呼叫函式時,給形式引數賦值的過程。 - 位置引數:傳參的一種形式。按照形參的位置順序,依次傳入具體的值。 - 關鍵字引數:傳參的一種形式。直接以變數賦值的形式(變數名 = 變數值)傳入 具體的資料,此時可以不遵從形參的位置順序。但是,位置引數和關鍵字引數混 用的時候,關鍵字引數必須寫在位置引數的後面。 - 預設引數:定義時被賦值的形參。在定義的時候可以給形參賦初值,可以根據具 體情況,在呼叫的時候以關鍵字引數的方式重新給該形參賦值。定義函式時,默 認引數寫在普通引數的後面。 - 可變長度引數:特殊的形參,*引數名(一般寫成 *args) 和 **引數名(一般寫成 **kwargs)。可以接收任意個多餘的引數。以位置引數的形式傳參的多餘引數存 放在元組中,並且元組的名字是args;以關鍵字引數的形式傳入的多餘引數存放 到字典中,並且字典的名字是kwargs。 # ############################################################# #位置引數和關鍵字引數 def add_num(x, y, z): result = x + y + z return result value = add_num(2, 3, 4) # value = add_num(2, z = 4, y = 3) print(value) #預設引數和可變長度引數 def add_anyNum(sumary=0, *args): for index in range(0, len(args)): sumary += args[index] return sumary value = add_anyNum(1,2,3,4,5,6,7) print(value)
-
作用域
常見函式
-
函式的分類
- 根據引數分類 ''' 1. 無參函式:一般應用於不處理資料的情況 2. 有參函式:一般應用於需要處理資料的時候 ''' - 根據函式體分類 ''' 1. 空函式:函式體為pass。一般用於寫程式結構的時候,後面再寫上具體的 功能 2. 實體函式:普通的函式,定義的時候有具體的功能程式碼 ''' - 根據返回值分類 ''' 1. 有返回值函式:一般用於處理資料之後返回結果,預設返回None 2. 無返回值引數:一般用於不處理資料的函式中 '''
檔案操作
模組
面向物件
面向物件
-
面向物件與面向過程
解決一個問題,可能需要用到多個函式,當函式的個數達到十幾個甚至幾十個的時候,找起來會非常的麻煩,大大降低了開發的效率。面向物件就是把這些函式歸到一類,並且以後再次出現這類問題的時候,能夠快速地找到每一步對應的函式;而面向過程中,每次解決同類的問題,程式設計師需要在一堆函式中,準確地找到目標函式。
-
應用場景
當處理一類問題,要用到多個函式的時候,建議使用面向物件。當然,如果只是為了解決這一個問題,以後不會再處理類似的問題時,沒有必要採取面向物件的程式設計方式。
-
物件和類
- 類:多個函式放到一個地方,這個地方叫做類 - 物件:類裡面的所有內容屬於誰,誰就是這個類的物件
成員
-
屬性
- 屬性就是變數在面向物件中的特殊稱謂 - 例項屬性(例項變數):封裝到物件中的變數 - 類變數(類屬性):封裝到類中的變數
-
方法
- 方法就是函式在面向物件中的特殊稱謂 - 所有的方法都屬於類 - 例項方法(物件方法):方法必須含有self引數,主要用於處理封裝到物件中的 資料,只能通過例項呼叫。 - 類方法:@classmethod裝飾器修飾,self替換為cls引數,主要用於處理類變數 或其他方法。通過類直接呼叫,物件也可以呼叫但是不推薦。 - 靜態方法:@staticmethod裝飾器修飾,一般用不到引數。通過類直接呼叫,對 象也可以呼叫但不推薦。 - 屬性:@property裝飾器修飾,只能由一個self引數,一般會有返回值,只能通 過物件呼叫,呼叫的時候不要加括號。 - 特殊方法 ''' 1. __init__(self):初始化方法,例項化物件時自動呼叫,主要用於 獲取物件中封裝的資料 2. __new__(self):構造方法,用於建立空物件(例項化物件的時候, 先執行構造方法建立物件,再執行初始化方法) 3. __call__(self):類中定義call方法後,物件加括號執行call方法 4. __str__(self):類中定義str方法後,列印物件的時候執行該方法 5. __dict__(self):將物件中的屬性轉換為字典形式 6. __enter__(self)__exit__(self,exc_type,exc_val,exc_tb) _:上下文管理。主要用於在類中做檔案操作,在類中,定義enter方 法和exit方法,with 類():... 首先執行enter方法,在執行with 類中的方法,最後執行exit中的方法 7. __add__(self):兩個物件相加 ''' - 內建函式 ''' 1. issubclass(A, B):判斷A是否是B的派生類,基類的基類也滿足 2. isinstance(A, B):判斷A是否是B的例項,B可以是基類 3. super():找到基類。如果派生類中的方法與基類中的方法名衝突,但是 想要執行基類中的方法,可以super().方法()。如果多個基類中都有, 只找第一個。 ''' class Student(object): identity = "person" # 1.例項方法(繫結方法) def get_information(self, name, age, height, weight): self.name = name self.age = age self.height = height self.weight = weight # 2.類方法 @classmethod def change_identity(cls): cls.identity = "student" # 3.靜態方法 @staticmethod def who_is(): print("I am a boy.") # 4.屬性 @property def bmi(self): result = float(self.height) / float(self.weight) return result brank = Student() brank.get_information("BrankYeen", 18, 1.70, 70) Student.change_identity() print(Student.identity) Student.who_is() print(brank.bmi) # ############################################################## class Student(object): # 初始化方法 def __init__(self, name , age): self.name = name self.age = age # str方法 def __str__(self): return "這是一個Student類的物件" # call方法 def __call__(self): print(f"{self.name}的年齡是{self.age}") brank = Student("BrankYeen", 18) brank() print(brank) # ############################################################ class Person(object): def func(self): print("Person.func") class Student(Person): def func(self): super().func() print("Student.func") brank = Student() print(isinstance(brank, Student)) print(isinstance(brank, Person)) print(issubclass(Student, Person)) brank.func()
-
成員修飾符
- 無論是方法還是屬性,都可以分為公有和私有。公有的成員可以在外部進行訪 問,而私有的成員只能在類的內部進行使用。 - 可以在類中的定義方法,將私有成員作為返回值,此時就可以在外部訪問到私有 成員;也可以直接呼叫內建方法:物件._類名__私有成員 class Student(object): __identity = "student" def private_attribute(self): return Student.__identity brank = Student() print(brank._Student__identity) print(brank.private_attribute())
三大特徵
-
封裝
-
繼承
- 如果一個類想要用另一個類中的方法,則需要繼承該類;繼承一個類叫做單繼 承,繼承多個類叫做多繼承,繼承的順序決定了基類的優先順序。 - 被繼承的類叫做基類(父類),需要繼承的類叫做派生類(子類)
-
多型