面試題1:Python中的列表推導式是什么?請給出一個例子。
回答:
列表推導式(List Comprehension)是Python中一種非常強大且簡潔的構建列表的工具。它允許你通過一個表達式來創建一個新的列表,這個表達式定義了新列表中的元素應該如何從舊列表或其他可迭代對象中派生出來。列表推導式通常比使用循環來構建列表更加簡潔和易讀。
例子:
假設我們有一個數字列表,我們想創建一個新列表,其中包含原列表中每個數字的平方。使用列表推導式,我們可以這樣做:
original_list = [1, 2, 3, 4, 5]
squared_list = [x**2 for x in original_list]
print(squared_list)
這段代碼會輸出:[1, 4, 9, 16, 25]
。這里,[x**2 for x in original_list]
就是一個列表推導式,它遍歷original_list
中的每個元素x
,計算x
的平方,并將結果收集到一個新的列表中。
面試題2:解釋一下Python中的裝飾器是什么,并給出一個使用裝飾器的例子。
回答:
裝飾器是Python中的一個高級且非常有用的功能,它允許你在不修改原有函數代碼的情況下,為函數添加新的功能。裝飾器本質上是一個函數,它接受一個函數作為參數,并返回一個新的函數。這個新的函數通常會在原有函數的基礎上增加一些額外的功能,比如日志記錄、性能測試、事務處理、緩存等。
使用裝飾器的好處是,你可以將額外的功能與原有的函數邏輯分離,使得代碼更加清晰和易于維護。同時,裝飾器也提高了代碼的復用性,因為你可以將同一個裝飾器應用到多個不同的函數上。
例子:
下面是一個使用裝飾器的例子,我們定義了一個timer
裝飾器,用于測量函數的執行時間。
import timedef timer(func):def wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"{func.__name__} executed in {end_time - start_time} seconds.")return resultreturn wrapper@timer
def some_function(n):sum = 0for i in range(n):sum += ireturn sumprint(some_function(1000000))
在這段代碼中,timer
是一個裝飾器,它接受一個函數func
作為參數,并返回一個新的函數wrapper
。wrapper
函數在調用原始函數func
之前和之后分別記錄時間,從而測量函數的執行時間。
@timer
語法是Python提供的一種方便的應用裝飾器的方式,它相當于some_function = timer(some_function)
。這樣,當我們調用some_function(1000000)
時,實際上調用的是wrapper
函數,它會測量some_function
的執行時間并打印出來。