python之def函數
如果我們用代碼實現了一個小功能,但想要在程序代碼中重復使用,不能在代碼中到處粘貼這些代碼,
因為這樣做違反 了軟件工程中 DRY原則。 Python 提供了 函數功能,
可以將我們這部分功能抽象成一個函數以方便程序調用,或者提供給其他模塊使用。
#基本使用
1 def function_name(parameters): 2 expressions
Python 使用 def
開始函數定義,緊接着是函數名,括號內部為函數的參數,內部為函數的 具體功能實現代碼,如果想要函數有返回值, 在 expressions
中的邏輯代碼中用 return
返回。
#實例
1 def function(): 2 print('This is a function') 3 a = 1+2 4 print(a)
上面我們定義了一個名字為 function
的函數,函數沒有不接受參數,所以括號內部為空,緊接着就是 函數的功能代碼。如果執行該腳本,發現並沒有輸出任何輸出,因為我們只定義了函數,而並沒有執行函數。 這時我們在 Python 命令提示符中輸入函數調用 function()
, 注意這里調用函數的括號不能省略。那么 函數內部的功能代碼將會執行,輸出結果:
1 This is a function 2 3
如果我們想要在腳本中調用的腳本,只需要在腳本中最后添加函數調用語句
1 function()
那么在執行腳本的時候,將會執行函數。
def函數參數
我們在使用的調用函數的時候,想要指定一些變量的值在函數中使用,那么這些變量就是函數的參數,函數調用的時候, 傳入即可。
#基本使用
1 def function_name(parameters): 2 expressions
parameters
的位置就是函數的參數,在調用的時候傳入即可。
#實例
1 def func(a, b): 2 c = a+b 3 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)
是同樣的 的效果。
def函數默認參數
我們在定義函數時有時候有些參數在大部分情況下是相同的,只不過為了提高函數的適用性,提供了一些備選的參數, 為了方便函數調用,我們可以將這些參數設置為默認參數,那么該參數在函數調用過程中可以不需要明確給出。
#基本使用
1 def function_name(para_1,...,para_n=defau_n,..., para_m=defau_m): 2 expressions
函數聲明只需要在需要默認參數的地方用 =
號給定即可, 但是要注意所有的默認參數都不能出現在非默認參數的前面。
#實例
1 def sale_car(price, color='red', brand='carmy', is_second_hand=True): 2 print('price', price, 3 'color', color, 4 'brand', brand, 5 'is_second_hand', is_second_hand,)
在這里定義了一個 sale_car
函數,參數為車的屬性,但除了 price
之外,像 color
, brand
和 is_second_hand
都是有默認值的,如果我們調用函數 sale_car(1000)
, 那么與 sale_car(1000, 'red', 'carmy', True)
是一樣的效果。當然也可以在函數調用過程中傳入特定的參數用來修改默認參數。通過默認參數可以減輕我們函數調用的復雜度。
形參、實參與局部變量、全局變量的關系。
答:首先明確,變量是一個更大的范圍。
所有的形參都是局部變量,所有的實參都是全局變量。用集合的角度來說,就是形參是局部變量的子集,實參是全局變量的子集。
這里解釋一下為什么形參都是局部變量。
形參是局部變量,全局變量在程序開始時創建並分配空間,在程序結束時候釋放內存並銷毀,局部變量是在函數調用的時候創建,在函數調用結束后銷毀並釋放,形參在函數調用時才分配空間,在函數調用后釋放,所以是局部變量。