一、什麼是自定義函數
在Python中,函數(function)是一段能夠完成指定任務的可重用代碼塊,可以幫助我們更好地組織程序,並節省重複代碼的開發時間。而自定義函數是指我們自己定義的函數,不同於Python內置函數。自定義函數一般具有如下特點:
1、需要進行聲明和定義。
2、可以在函數內部定義變數和使用Python表達式。
3、可以接受任意多個參數,並返回任意數據類型的返回值。
通過自定義函數,我們可以將程序拆分成多個小模塊,實現了程序結構的模塊化。
二、自定義函數的基本語法
自定義函數的基本語法如下:
def function_name(parameters): """ function_name函數說明 """ # 函數體 return value
其中,function_name是自定義函數的名稱,parameters是函數參數列表,多個參數之間用逗號隔開。函數體包括了函數的具體邏輯實現,並可以使用Python表達式來計算和處理數據。return語句用於將計算結果返回給函數調用者。
三、函數參數傳遞
Python函數參數傳遞有兩種方式:
1、位置參數傳遞:傳遞參數時按照函數定義的順序進行傳遞。
例如:
def add(x, y): return x + y print(add(1, 2)) # 輸出3
2、關鍵字參數傳遞:傳遞參數時通過指定參數名的方式進行傳遞。
例如:
def add(x, y): return x + y print(add(y=2, x=1)) # 輸出3
四、函數返回值
函數的返回值可以是任意數據類型,包括數字、字元串、列表、字典、函數等。如果函數沒有顯示的return語句,則返回值為None。
例如:
def get_name(): name = "小明" return name print(get_name()) # 輸出"小明"
五、函數遞歸調用
函數遞歸調用是指在函數中調用該函數本身。函數遞歸調用一般分為兩種情況:
1、基本情況:函數內部包含一個停止條件,可以直接返回結果。
2、遞歸情況:函數內部包含一個可以把問題分解成更小的子問題的遞歸操作。
例如:實現階乘函數的遞歸調用方式:
def factorial(n): if n == 1: return 1 else: return n * factorial(n-1) print(factorial(5)) # 輸出120
六、函數裝飾器
函數裝飾器是將一個函數作為參數並返回一個新函數的函數。裝飾器的作用是在不修改原函數代碼的情況下,添加新的功能或修改函數行為。常用於函數許可權控制、函數調試、函數性能分析等場景。
例如:實現一個計算函數運行時間的裝飾器:
import time def calculate_time(func): def wrapper(): start_time = time.time() func() end_time = time.time() print("函數運行時間為:{}".format(end_time-start_time)) return wrapper @calculate_time def run(): for i in range(100000000): pass run() # 輸出函數運行時間為:4.123821258544922e-06
七、函數參數默認值
函數參數默認值是指在函數定義時,為參數指定一個初始值。在函數調用時,如果未給該參數傳值,則會使用初始值作為參數值。
例如:
def say_hello(name="小明"): print("你好,{}".format(name)) say_hello() # 輸出"你好,小明" say_hello("小紅") # 輸出"你好,小紅"
八、函數參數收集
函數參數收集是指在函數定義時,收集不定數量的參數作為一個可迭代的序列。函數參數收集有兩種方式:
1、*args: 收集不定數量的位置參數,並將其包裝成元組。
例如:
def func(*args): for arg in args: print(arg) func(1, 2, "a", "b") # 輸出1, 2, "a", "b"
2、**kwargs: 收集不定數量的關鍵字參數,並將其包裝成字典。
例如:
def func(**kwargs): for key, value in kwargs.items(): print("{}: {}".format(key, value)) func(a=1, b=2, c="hello") # 輸出a: 1, b: 2, c: "hello"
九、函數作用域
函數作用域是指變數的可見性範圍。Python中有三種函數作用域:
1、全局作用域:變數在函數外部定義,所有函數內部都可以訪問。
2、局部作用域:變數在函數內部定義,只能在函數內部訪問。
3、內置作用域:Python內置函數的作用域,所有函數內部都可以訪問。
當Python查找變數時,會按照以下順序進行查找:
局部作用域 -> 全局作用域 -> 內置作用域
例如:
a = 10 # 全局變數,所有函數都可以訪問 def test(): b = 20 # 局部變數,只能在函數內部訪問 print(a) # 可以訪問全局變數a print(b) # 可以訪問局部變數b test() print(a) # 可以在函數外部訪問全局變數a print(b) # 會報錯,無法訪問函數內部的局部變數b
十、函數重載
函數重載是指在一個函數名下實現多個函數,並根據不同的參數類型或數量調用相應的函數。但是,Python中並沒有函數重載的概念,因為Python是一種動態類型語言,變數的類型只有在運行時才能確定,因此函數重載沒有太大的必要性。
例如:
def add(a, b): return a + b def add(a, b, c): return a + b + c print(add(1, 2)) # 報錯,沒有對應的函數可以調用 print(add(1, 2, 3)) # 輸出6
總結
自定義函數是Python編程中非常重要的一部分,通過自定義函數,我們可以將程序結構化、模塊化。在編寫自定義函數時,需要注意函數聲明、參數傳遞、函數返回值、函數遞歸、函數裝飾器、函數參數默認值、函數參數收集、函數作用域等知識點,掌握這些知識點可以讓我們更好的編寫高質量、復用性強的Python程序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/300282.html