Python常見問題解答
1. 函數參數傳遞是值傳遞還是引用傳遞?
Python中的參數傳遞是"對象引用傳遞"(或稱為"共享對象傳遞")。具體來說:
- 對于不可變對象(如數字、字符串、元組),傳遞的是對象的值(表現為類似值傳遞)
- 對于可變對象(如列表、字典),傳遞的是對象的引用(表現為類似引用傳遞)
示例:
def modify(num, lst):num += 1lst.append(4)a = 10
b = [1, 2, 3]
modify(a, b)
print(a) # 輸出 10 (不變)
print(b) # 輸出 [1, 2, 3, 4] (已修改)
2. 如何避免函數副作用?
函數副作用指的是函數修改了外部狀態或變量。避免副作用的方法:
- 使用不可變數據結構:優先使用元組而非列表
- 創建副本:在函數內部操作前創建參數的副本
def process_data(data):data = data.copy() # 創建副本# 處理data...
- 純函數:函數只依賴于輸入參數,不修改外部狀態
- 返回新對象:而不是修改輸入參數
- 使用函數式編程:如map、filter、reduce等
3. 為什么需要if __name__ == '__main__'
?
這個語句用于判斷當前模塊是否是直接運行的(而非被導入的)。它的作用:
- 防止模塊被導入時自動執行代碼:只有直接運行該文件時,
if
塊中的代碼才會執行 - 模塊測試:可以在
if
塊中編寫測試代碼 - 提高代碼重用性:既可作為模塊導入,也可直接運行
示例:
def some_function():print("This is a function")if __name__ == '__main__':print("This runs when executed directly")some_function() # 測試代碼
當該文件被導入時,__name__
會是模塊名;當直接運行時,__name__
會是'__main__'
。