一、基礎語法
Python函數定義的基礎語法如下:
def 函數名(參數列表):
函數體
return [返回值]
其中,def
是定義函數的關鍵字,後面跟着函數名和一對圓括號,括號內可以列出多個參數,多個參數使用逗號隔開。函數體是縮進的代碼塊,也就是我們的函數要執行的操作。函數的返回值是可選的。
下面是一個例子:
def say_hello(name):
print("Hello, " + name + "!")
say_hello("World")
這個函數的名字是say_hello
,它帶有一個參數name
。函數體只有一行,它打印一條問候信息。在say_hello
函數被調用時,我們向它傳遞了一個值為"World"
的參數,函數就會打印出"Hello, World!"
。
二、函數參數
Python函數支持四種類型的參數:
- 位置參數
- 關鍵字參數
- 默認參數
- 可變參數
位置參數
位置參數是最常用的一種參數類型,函數會按照參數列表的順序進行匹配。例如:
def add(x, y):
return x + y
print(add(1, 2)) # 輸出 3
上面的例子中,我們定義了一個add函數,它接受兩個參數x和y,函數返回它們的和。我們在調用函數時傳遞了兩個參數1和2,函數返回了它們的和,即3。
關鍵字參數
關鍵字參數允許我們使用參數的名稱來匹配函數參數,從而使函數更易於閱讀和調用。例如:
def print_info(name, age, address):
print("Name: " + name)
print("Age: " + str(age))
print("Address: " + address)
print_info(name="Alice", age=25, address="Beijing")
上面的例子中,我們定義了一個print_info函數,它接受三個參數name、age和address。在調用函數時,我們使用它們各自的名字來傳遞參數,這使得代碼更容易理解和維護。
默認參數
默認參數是指在函數定義時提供的參數值,如果函數被調用時沒有提供該參數的值,則會使用這個默認值。例如:
def greet(name, message="Hello"):
print(message + ", " + name + "!")
greet("Bob") # 輸出 "Hello, Bob!"
greet("Alice", "Good morning") # 輸出 "Good morning, Alice!"
在上面的例子中,我們定義了一個greet函數,它接受兩個參數,其中message具有默認值”Hello”。我們可以使用這個默認值調用函數,也可以在調用時提供自己的值。
可變參數
可變參數指的是函數可以接受任意數量的參數。在Python中,我們可以使用星號(*)來聲明一個可變參數,例如:
def sum(*numbers):
total = 0
for num in numbers:
total += num
return total
print(sum(1, 2, 3, 4, 5)) # 輸出 15
上面的例子中,我們定義了一個sum函數,它接受一個可變參數numbers。可變參數是一個元組,包含了函數調用時傳遞的所有實參。函數體遍歷這個元組並計算它們的總和。在調用sum函數時,我們傳遞了五個參數,函數計算它們的和,並返回15。
三、函數返回值
函數可以有返回值,也可以沒有。如果沒有返回值,函數會自動返回None
。
函數的返回值可以是任何Python對象,包括數字、字符串、元組、列表、字典、集合、甚至是其他函數。例如:
def get_max(numbers):
if len(numbers) == 0:
return None
max_num = numbers[0]
for num in numbers:
if num > max_num:
max_num = num
return max_num
print(get_max([1, 3, 5, 2, 4])) # 輸出 5
上面的例子中,我們定義了一個get_max函數,它接受一個參數numbers,這個參數是一個列表。函數體首先檢查列表是否為空,如果是,則返回None
,否則從列表中找到最大的數並返回它。在調用get_max函數時,我們傳遞了一個包含五個數字的列表,函數返回了其中的最大值。
四、局部變量和全局變量
在Python函數中,變量的作用域決定了它們在程序中的可見性和生命周期。
局部變量
一個變量只有在函數內部定義的時候才是局部變量,只有在函數內部才可以訪問這個變量。
def foo():
x = 10 # x 是局部變量
print(x)
foo() # 輸出 10
全局變量
全局變量是在函數外部定義的變量,可以在整個程序中被訪問。
x = 10 # x 是全局變量
def foo():
print(x)
foo() # 輸出 10
注意,如果函數內部使用了與全局變量同名的變量,那麼函數內部會創建一個新的局部變量,它會遮蓋全局變量。例如:
x = 10 # x 是全局變量
def foo():
x = 20 # x 是局部變量
print(x)
foo() # 輸出 20
print(x) # 輸出 10
在上面的例子中,函數內部聲明了一個新的局部變量x,它遮蓋了全局變量x。在函數內部,打印x會輸出20,而在函數外部,打印x會輸出10。
五、閉包
閉包是指在函數內部定義的函數,並且可以訪問外層函數的變量。閉包可以起到保護變量的作用,同時還可以進行一些特殊的操作,比如緩存某些計算結果,以提高程序的性能。
def make_adder(x):
def adder(y):
return x + y
return adder
add5 = make_adder(5)
print(add5(3)) # 輸出 8
在上面的例子中,我們定義了一個make_adder函數,它接受一個參數x,並返回一個函數adder。adder函數可以訪問外部函數make_adder的變量x,即使在make_adder函數返回之後,x的值仍然保持不變。在調用make_adder函數時,我們傳遞了5作為參數,函數返回一個adder函數,我們將其賦值給add5變量。接着我們調用add5函數,傳遞參數3,得到8的結果。
六、裝飾器
裝飾器是一種可以動態地修改函數或類的行為的技術。在Python中,我們使用裝飾器函數來實現裝飾器。裝飾器函數接受一個函數作為參數,並返回一個新的函數,它可以修改原始函數的行為或添加額外的功能。
下面是一個簡單的裝飾器示例:
def my_decorator(func):
def wrapper():
print("Before")
func()
print("After")
return wrapper
@my_decorator
def say_hello():
print("Hello")
say_hello()
在上面的例子中,我們定義了一個裝飾器函數my_decorator
,它接受一個函數func
作為參數,並返回一個新的函數wrapper
。在wrapper
函數內部,我們添加了一些額外的代碼,它會在原始函數被調用之前和之後打印一些信息。在say_hello
函數上方使用@my_decorator
裝飾器語法,表示say_hello
函數將被my_decorator
裝飾器所修改。最後,我們調用say_hello
函數,它的輸出會被包含在額外的代碼之間。
七、總結
Python函數是我們編寫複雜代碼的不可或缺的工具。掌握Python函數的語法和使用方法可以極大地提高我們的編程效率和代碼的可讀性。在本文中,我們介紹了Python函數的基礎語法、參數、返回值、局部變量、全局變量、閉包和裝飾器,這些知識點是Python編程中的重要組成部分。在實際應用中,我們需要靈活運用這些知識點,編寫高質量、可維護的Python代碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/181688.html