第五章 模塊與函數
這章主要是介紹python
模塊和函數的特性。
5.1 程序的結構
python
的程序是由包,模塊和函數組成。模塊是處理某一類問題的集合,模塊是由函數和類組成。包是由一系列模塊組成的集合,至少包含__init__.py
文件的文件夾,類似於一個完成特定任務的工具箱,python
提供了許多有用的工具包,如字符串處理,圖形用戶接口,Web
應用,圖形圖像處理。
5.2 模塊
from...import...
語句格式如下:
from module_name import function_name
python
的import
語句比較靈活,甚至可以放在條件語句中。模塊內置一些屬性,用於完成特定的任務。如__name__
,__doc__
。每個模塊都有一個名稱,例如__name__
用於判斷當前模塊是否是程序的主入口,如果當前程序正在被使用,__name__
的值爲__main__
。
if __name__ == "__main__":
print ("作爲主程序入口")
else:
print ("被另一個模塊調用")
第一行代碼用於判斷是否作爲主程序運行,如果是運行此程序,就打印“作爲主程序入口”,如果是被別的程序調用,就打印“被另一個模塊調用”。__doc__
這個就是文檔字符串,之前介紹過,用於給程序某些內容輸出給用戶看,引導用戶使用程序。
函數
函數就是一段可以重複多次調用的代碼,通過輸入參數值,返回需要的結果。函數名可以是字母,數字或下劃線組成的字符串,但是不能以數字開頭,函數的參數放在一對圓括號中,參數的個數可以有一個或者多個,參數之間用逗號隔開。
#函數的定義
from __function__ import division
def arithmetic (x, y, operator):
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
函數的參數也可以使用默認值,比如這樣:
#函數的定義
from __function__ import division
def arithmetic (x = 1, y = 1, operator = "+" ):
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
這麼寫的話如果不輸入參數的話就默認參數值了。參數可以是變量,元組,列表等內置數據結構。
python
還提供另一個標識符“**
”。在形式參數前面添加“**
”,可以引用一個字典,根據實際參數的賦值表達式生成字典。“
*
”必須寫在“**
”的前面,這是語法規定。
函數的返回使用return
語句,return
後面可以是變量或表達式。
#多個return語句
def func(x):
if x > 0:
return print ("x > 0")
if x == 0:
return print ("x = 0")
if x < 0:
return print ("x < 0")
print (func(2))
這是return
語句的用法,不過不推薦多個return
語句的寫法,往往會造成程序的複雜化,重構以後是這樣的:
#多個return語句
def func(x):
if x > 0:
result = "x > 0"
elif x == 0:
result = "x = 0"
else x < 0:
result = "x < 0"
return result
print (func(2))
函數的嵌套是指在函數的內部調用其他函數,不過函數嵌套不易過多,應控制在3層以內。
#函數嵌套
def sum(a, b):
return a + b
def sub(a, b):
return a - b
def func():
x = 1
y = 2
m = 3
n = 4
return sum(x, y) * sub(m, n)
print (func())
遞歸函數可以在函數主體內直接或間接的調用自己,即函數的嵌套是函數本身。遞歸是一種程序設計方法,使用遞歸可以減少重複的代碼,使程序變得簡潔。遞歸的過程分爲兩個階段——遞推和迴歸。第一階段,遞歸函數在內部調用自己,第二階段,遞歸函數從後往前返回。遞歸函數需要編寫遞歸結束的條件,否則程序無法結束。一般通過判斷語句結束程序。
`lambda
函數的格式:
lambda 變量1, 變量2... : 表達式
通常把lambda
賦值給一個變量,變量就可作爲函數使用。用法例如:
sum = lambda x, y : x + y
print (sum)
lambda
也成爲表達式。lambda
中只能使用表達式,不能使用判斷,循環等多重語句。
許多任務都是由若干個函數組成,這些函數把任務細化,實現明確的功能,最後把這些函數組合起來形成一個完整的模塊。