Python作為一門高級編程語言,支持函數作為一等公民的概念,函數的定義和使用也非常方便。本文將從多個方面介紹定義函數的Python關鍵字及用途。
一、定義函數的Python關鍵字及用途
在Python中,使用def關鍵字進行函數的定義,格式如下:
def function_name(parameters):
"""函數文檔字符串"""
# 函數體
return [expression]
其中,function_name為函數名稱,parameters為函數參數列表,可以為空;函數文檔字符串可以提供函數的注釋,以方便後續函數使用的人員理解;函數體為Python代碼塊,可以包含多個語句;return語句用於返回函數結果,可以省略。
函數定義後,可以通過函數名加參數列表的形式進行函數的調用。函數調用時,參數可以為位置參數或關鍵字參數,例如:
def add_numbers(x, y):
"""求兩個數的和"""
return x + y
print(add_numbers(1, 2)) # 輸出3
print(add_numbers(y=2, x=1)) # 輸出3
此處定義了一個函數add_numbers,可以接收兩個參數x和y,並返回它們的和。在函數調用時,參數x和y可以以位置參數或關鍵字參數的形式傳遞,輸出結果都是3。
二、函數參數的默認值
在定義函數時,可以為參數賦予默認值,這使得在函數調用時可以不傳遞默認值對應的參數,而是使用默認值。例如:
def say_hello(name="World"):
"""向特定人群打招呼"""
print("Hello, " + name + "!")
say_hello() # 輸出Hello, World!
say_hello("Alice") # 輸出Hello, Alice!
此處定義了函數say_hello,它接受一個名為name的參數,如果在函數調用時不傳遞參數,則默認為字符串”World”。在第一個say_hello調用中,未傳遞任何參數,因此輸出默認的”Hello, World!”。在第二個say_hello調用中,傳遞了參數”Alice”,因此輸出”Hello, Alice!”。
三、可變參數和關鍵字參數
1、可變參數
在Python中,使用星號(*)前綴來定義可變參數,也被稱為不定長參數。可變參數接收的是元組,其中包含了所有傳遞給函數的位置參數。
def add_numbers(*args):
"""求多個數的和"""
total = 0
for num in args:
total += num
return total
print(add_numbers(1, 2, 3)) # 輸出6
print(add_numbers(4, 5, 6, 7)) # 輸出22
此處定義了函數add_numbers,它接受任意數量的參數,使用一個for循環遍歷所有的參數,並將它們累加起來,返回總和。在第一個add_numbers調用中,傳遞了三個參數1、2、3,因此輸出6。在第二個add_numbers調用中,傳遞了四個參數4、5、6、7,因此輸出22。
2、關鍵字參數
在Python中,使用兩個星號(**)前綴來定義關鍵字參數,也被稱為不定長關鍵字參數。關鍵字參數接收的是字典,其中包含了所有傳遞給函數的關鍵字參數。
def print_info(**kwargs):
"""打印個人信息"""
print("name:", kwargs['name'])
print("age:", kwargs['age'])
print("gender:", kwargs['gender'])
print_info(name="Alice", age=18, gender="female")
此處定義了函數print_info,使用關鍵字參數接收三個參數:name、age、gender。在函數內部,通過訪問字典的方式,打印出了傳遞過來的參數。在這個例子中,函數調用時使用了三個關鍵字參數傳遞信息,因此輸出結果如下:
name: Alice age: 18 gender: female
四、lambda表達式
在Python中,lambda表達式也叫匿名函數,可以快速定義簡單的函數。lambda函數返回的是一個函數對象,可以在需要時調用該函數。
square = lambda x: x ** 2 print(square(3)) # 輸出9
此處使用lambda表達式,定義了一個求平方的函數square,它接受一個參數x,返回x的平方。在調用時,傳遞參數3,輸出結果為9。
五、閉包
在Python中,閉包指的是一個函數對象,可以訪問定義在外部函數作用域內的變量。閉包在某些場景下可以實現高階函數的效果。
def outer_func(x):
"""外部函數"""
def inner_func(y):
"""內部函數"""
return x * y
return inner_func
multiplier = outer_func(3)
print(multiplier(4)) # 輸出12
此處定義了兩個函數:outer_func外部函數和inner_func內部函數,inner_func可以訪問outer_func中定義的變量x。在這個例子中,outer_func返回的是inner_func函數本身,因此multiplier指向了inner_func函數。在multiplier調用時,傳遞參數4,inner_func中的x值為3,因此輸出結果為12。
六、裝飾器
在Python中,裝飾器可以理解為用於修改其他函數的函數。裝飾器的常見用途有函數計時、日誌、緩存、權限控制等。裝飾器用於實現切面編程(Aspect Oriented Programming,AOP)的思想。
def my_decorator(func):
"""裝飾器函數"""
def wrapper():
"""包裝器函數"""
print("Before function execution.")
func()
print("After function execution.")
return wrapper
@my_decorator
def say_hello():
"""打招呼函數"""
print("Hello, World!")
say_hello()
此處定義了一個裝飾器函數my_decorator,用於在函數執行前後打印日誌。裝飾器函數內部定義了一個包裝器函數wrapper,它對原始函數進行了擴展。在函數定義時,使用@語法應用裝飾器,因此say_hello函數就被my_decorator裝飾。在say_hello被調用時,裝飾器函數會自動執行,輸出結果如下:
Before function execution. Hello, World! After function execution.
七、總結
本文介紹了Python中定義函數的關鍵字及用途,從函數定義、參數默認值、可變參數和關鍵字參數、lambda表達式、閉包和裝飾器多個方面對函數進行了闡述,並給出了相關示例代碼。函數是Python中非常重要的概念,它的靈活性和擴展性為Python帶來了無限的可能性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/189642.html
微信掃一掃
支付寶掃一掃