Python邏輯封裝 — 自訂函式與物件邏輯

Wen Chang
7 min readJan 16, 2020

--

單元三 : Python邏輯封裝 — 客製特定程式邏輯封裝

Python 及包含物件導向功能的高階語言,皆可將任意部分的程式邏輯進行封裝利於往後的引用與應用。我們在此學習使用函式以及物件導向功能的邏輯封裝複用與應用方法。

概略上來說,使用函式功能時,我們可藉由輸入參數(parameter)的不同讓我們可操作客製化邏輯結構的引用應用;而透過使用物件導向功能定義類別,我們可以藉由生成不同的實例(Instance),產生包裝邏輯與內容皆更為動態、彈性的重複應用結構關聯實體。

Function — 函式

函式封裝一段執行邏輯,使其利於引用或應用

函數是組織好可重複使用,用來實現單一,或相關聯功能的代碼段。我們將所需要的Python邏輯抽象成一個函數以方便程序調用,或者提供給其他模塊使用。 函數能提高應用的模塊性,和代碼的重複利用率

函式使用方式

1. 以def 開頭宣告函式命名,並以 : 結尾,函式執行內容需進行縮排
2.函式可將命名後的()內帶入輸入參數(optional)
3.使用 return 可返回函式內運行內容,輸出函式執行結果(optional)

定義函數 def

基本使用

定義函數使用 def 關鍵字,一般格式如下:

def 函数名(参数列表):
函数体
def function_name(parameters):
expressions

Python 使用 def 開始函數定義,緊接著是函數名,括號內部為函數的參數,內部為函數的 具體功能實現代碼,如果想要函數有返回值, 在 expressions 中的邏輯代碼中用 return 返回。

範例

def function():
print('This is a function')
a = 1+2
print(a)

上面我們定義了一個名字為 function 的函數,函數沒有接收參數,所以括號內部為空,緊接著就是 函數的功能代碼。如果執行該腳本,發現並沒有輸出任何輸出,因為我們只定義了函數,而並沒有執行函數。

This is a function
3

如果我們想要在腳本中調用的腳本,只需要在腳本中最後添加函數調用語句。這時我們在 Python 命令提示符中輸入函數調用 function(), 注意這裡調用函數的括號不能省略。那麼 函數內部的功能代碼將會執行,輸出結果:

function()

那麼在Python執行至此時,將會執行函數。

This is a function
3

函式參數 parameter

我們在使用的調用函數的時候,想要指定一些變量的值在函數中使用,那麼這些變量就是函數的參數,函數調用的時候, 傳入即可。

基本使用

def function_name(parameters):
expressions

parameters 的位置就是函数的参数,在调用的时候传入即可。

範例

def func(a, b):
c = a+b
print('the c is ', c)

在這裡定義的一個函數,其參數就是兩個數值,函數的功能就是把兩個參數加起來。運行腳本後,在Python 提示符內調用函數func, 如果不指定參數func(), 那麼將會出錯; 輸出func(1, 2),將a=1, b=2 傳入函數,輸出the c is 3 。所以在調用函數時候,參數個數和位置一定要按照函數定義。如果我們忘記了函數的參數的位置,只知道各個參數的名字,可以在函數調用的過程中給指明特定的參數func(a=1, b=2), 這樣的話,參數的位置將不受影響,所以func(b=2,a=1)是同樣的的效果。

返回執行結果 Return

return語句用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。之前的例子都沒有示範如何返回數值,以下演示return 語句的用法

範例

def sum( arg1, arg2 ):
# 返回2個參數的和."
total = arg1 + arg2
print ("函數內 : ", total)
return total

# 調用sum函數
total = sum( 10, 20 )
print ("函數外 : ", total)

輸出結果:

函數內 : 30
函數外 : 30

object oriented — 物件導向

類別class封裝許多型態的參數、邏輯,形成利於建構實例化應用的客製化抽象物件

使用class進行定義
物件本身是設計圖,需實例化產生物件實例(instance)方可使用
物件可繼承其他物件或被繼承
物件內容無法在物件外直接使用
方法(Method 物件內的函數)
變量(基礎資料型態單位)
實例變量,隨實例產生

使用方式

1. 以Class 開頭宣告類別命名名稱,並以 : 結尾

2. 以命名名稱後之()帶入繼承類別(optional)

3. 以類別內的變數定義類別變數或實例變數

4. 以類別內的函式定義該類別的方法(Method)

5. 將類別實例化產生Instance(實例)

定義類別語法格式如下:

class ClassName:     
<statement-1>
.
.
<statement-N>

實例(instance)

類經過實例化後,可以使用其屬性,實際上,創建一個類之後,可以通過類名訪問其屬性。類命名空間中所有的命名都是有效屬性名。所以如果類定義是這樣:

class MyClass:     
"""簡單的類範例"""
i = 12345
def f(self):
return 'hello world'
# 建立實例化類物件(institutionalization)
x = MyClass()
# 呼叫類物件屬性和方法
print("MyClass 類的屬性 i 為:", x.i)
print("MyClass 類的方法 f 輸出為:", x.f())

以上創建了一個新的類實例並將該對象賦給局部變量 x,x 為空的對象。
執行以上程序輸出結果為:

MyClass 類的屬性 i 為: 12345 
MyClass 類的方法 f 輸出為: hello world

範例

class 定義一個類, 後面的類別首字母推薦以大寫的形式定義,比如Calculator. class可以先定義自己的屬性,比如該屬性的名稱可以寫為name=’Good Calculator’. class後面還可以跟def,定義一個函數. 比如def add(self,x,y): 加法, 輸出print(x+y). 其他的函數定義方法一樣,注意這裡的self 是默認值.

class Calculator:       #類名稱後 冒号不能缺 不需要括號
name='Good Calculator' #進行縮排 並開始定義類的內容
price=18
def add(self,x,y):
print(self.name)
result = x + y
print(result)
def minus(self,x,y):
result=x-y
print(result)
def times(self,x,y):
print(x*y)
def divide(self,x,y):
print(x/y)
""""
>>> cal=Calculator() #注意這裡運行class的時候要加"()",否則調用下面函數的時候會出現錯誤,導致無法調用.
>>> cal.name
'Good Calculator'
>>> cal.price
18
>>> cal.add(10,20)
Good Calculator
30
>>> cal.minus(10,20)
-10
>>> cal.times(10,20)
200
>>> cal.divide(10,20)
0.5
>>>
""""

--

--