Python作為一種高級編程語言,擁有著廣泛的應用場景,在開發過程中,函數是Python編程不可或缺的一部分。函數的定義、使用和組成是Python編程的基本技巧。因此,在本文中,將從函數的定義、參數、返回值、作用域以及裝飾器幾個方面進行詳細的闡述。
一、函數的定義
函數是一種可調用的對象(callable object),它用于封裝代碼,將多個語句組成一個執行單元。以def關鍵字開頭、后接函數名及多個參數、冒號和縮進塊構成。其中,參數可以沒有,但是括號不能省略。
def function_name(parameters):
statement(s)
例如,定義一個輸出兩個數之和的函數:
def add(x, y):
result = x + y
print(result)
該函數接受兩個參數,并將它們相加得到的結果進行輸出。函數調用的時候,可以像下面這樣:
>>> add(1, 2)
3
在Python中,函數還支持缺省參數值,如:
def add(x, y=1):
result = x + y
print(result)
調用該函數時,可以只傳遞一個參數,在函數內部使用指定的缺省參數值進行計算:
>>> add(1)
2
二、參數
Python函數有兩類參數:必需參數和關鍵字參數。必需參數在調用函數時必須傳遞,對應上面定義函數時的parameters;而關鍵字參數是可選的,可以在調用函數時使用名稱和值進行傳遞。引入關鍵字參數可以使函數調用更清晰,更易于讀懂。
例如,定義一個含有必需參數和關鍵字參數的函數:
def foo(required_param, *args, **kwargs):
print(required_param)
if args:
for arg in args:
print(arg)
if kwargs:
for key, value in kwargs.items():
print(key, value)
在這個例子中,required_param是必需參數,而*args和**kwargs分別代表不定量的位置參數和關鍵字參數。
調用函數,不僅可以傳遞必需參數,還可以傳遞位置參數和關鍵字參數:
>>> foo('hello', 'world', 2018, name='Tom', age=18)
hello
world
2018
name Tom
age 18
三、返回值
函數可以通過return語句返回一個值。如果return語句沒有指定返回值,則默認返回None。在函數中,可以存在多個return語句,但只有一個會被執行。當執行到一個return語句時,函數就會立即結束并返回對應的值。
例如,定義一個求兩個數之和的函數:
def add(x, y):
result = x + y
return result
調用該函數時,可以使用變量存儲函數的返回值:
>>> result = add(1, 2)
>>> print(result)
3
四、作用域
Python中,局部變量在函數內部定義,全局變量在函數外部定義,在函數中也可以對全局變量進行訪問。函數可以使用global關鍵字來聲明一個變量并將其賦值為全局變量。
i = 5
def foo():
global i
i = i + 1
print(i)
foo() # 6
print(i) # 6
五、裝飾器
裝飾器是Python語言的重要特性之一,是一種用于修飾函數、方法或類的函數。裝飾器可以在定義函數的基礎上,添加一些額外的功能或者修改函數的行為。裝飾器主要是在不修改原函數代碼的情況下,對函數進行功能擴展或者修改。Python內置了很多有用的裝飾器,例如@staticmethod、@classmethod、@property等。使用裝飾器可以使代碼更加簡潔、優雅。
例如,定義一個裝飾器,用于輸出函數執行時間:
import time
def timeit(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print('Time:', end_time - start_time)
return result
return wrapper
@timeit
def add(x, y):
result = x + y
time.sleep(1)
print(result)
return result
add(1, 2) # 3; Time: 1.000
在該例子中,使用了timeit裝飾器來裝飾add函數。該裝飾器在調用函數之前輸出時間,調用函數之后輸出時間。