iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
自我挑戰組

終極大數據地獄系列 第 4

#4 Python進階教學1

副程式,也稱為函數、函式:將程式包裝成一個區塊,需要時再呼叫出來使用,讓我們來揭露副程式的奧秘吧~

副程式

先建構副程式,才能使用副程式
python只需要使用def關鍵字即可宣告副程式,用法如下:

#定義函數
def 函數名稱():
	函數內部程式...

是不是非常簡單呢?
現在建構完了,我們要來使用它

#呼叫函數
函數名稱()

我們實際操作一次看看

# 定義副程式
def say_hi():
    print("Hi")
    
# 使用副程式
say_hi()
# 印出 "Hi"

令一個基本操作,帶參數呼叫,使用方法如下

#定義函數
def 函數名稱(參數名稱1, 參數名稱2,.....):
	函數內部程式

#呼叫函數
    函數名稱(參數1, 參數2,.....)

程式碼如下

# 定義副程式
def say(word):
    print(word +  "! friend")
    
# 使用副程式
say("Hi")

# 印出 "Hi! friend"

有回傳值的副程式

** return 傳出 回傳值,並強制結束函數**

#定義函數
def 函數名稱(參數名稱1, 參數名稱2,.....):
	函數內部程式
	return 回傳值
    
#呼叫函數
變數 = 函數名稱(參數1, 參數2,.....)

下面是輸入一個數字的參數,副程式會回傳該數字的階乘(3!、5!、等...)副程式

# 定義副程式
def factorial(num):
    ans = num
    num -= 1
    while num > 0 :
        ans *= num
        num -= 1
    return ans
    
# 使用副程式
a = say(6)
print(a)

# 印出  720

參數的操作

參數預設值

我們在定義副程式的時候,可以先給參數預設值,這樣當我呼叫復生是的時候,要是沒有下參數,副程式就會自己使用內建的參數預設值,用法如下

# 定義副程式
def dog(name = "小黑"):
	print(name)
# 使用副程式
dog()                #印出  小黑
dog("小白")      #印出  小白

多個參數

我們在定義副程式時可以宣告多個參數,呼叫時也必須依照參數的先後順序賦值,範例如下

# 定義副程式
def dinner(time, food):
    print("在" + time + ",吃" + food)
# 使用副程式    
dinner("八點", "達美樂")
 #印出  "在八點,吃達美樂"

如果沒有按照順序下參數,可能會出現以下不合邏輯的錯誤

# 定義副程式
def dinner(time, food):
    print("在" + time + ",吃" + food)
# 使用副程式    
dinner("達美樂", "八點")
 #印出  "在達美樂,吃八點"

我們可以看到上面的兩個參數下的順序反了,所以出現了我們預期以外的錯誤,如果非要不按照順序下參數,這時候要使用下面的技巧

指定參數賦值

在呼叫副程式時,指定參數的內容,操作如下

# 定義副程式
def dinner(time, food):
    print("在" + time + ",吃" + food)
# 使用副程式    
dinner(food = "達美樂", time = "八點")
 #印出  "在達美樂,吃八點"

主程式

C跟Java都有個主程式,而python是不需要主程式就能執行的,但主程式能幫助我們標記程式的進入點,進而達成模組化開發,沒有主程式的結果就是各行指令都是分散的,可能第一行是執行一條指令,接著第2、3...都是在定義副程式,而下一行要執行的指令卻在10多行,這樣會造成程式難以閱讀,因此這裡要來介紹主程式

if __name__ == "__main__":
    print("hello world")

if __name__ == "__main__":這個區塊的內容就是主程式,也就是程式的進入點,下面是範例

def say(word):
    return "Hey!" + word + "!"
    
if __name__ == "__main__":
    print(say("hello world"))
# 印出  "Hey!hello world!"

上一篇
#3 Python教學2
下一篇
#5 Python進階教學2
系列文
終極大數據地獄24

尚未有邦友留言

立即登入留言