Python 函數(Function)詳解:新手指南

更新日期: 2024 年 10 月 7 日

在 Python 編程中,函數(Function) 是一種非常重要的概念。

它們允許我們將代碼組織成可重用的塊,從而提高代碼的可讀性和維護性。

對於剛開始學習 Python 的新手來說,理解並掌握函數的定義、使用方法和最佳實踐,將大大提升您的編程能力和效率。

本文將詳細介紹 Python 中的函數,包括其基本概念、語法、引數傳遞、返回值、匿名函數和高階函數等,幫助您在實際開發中靈活運用。


什麼是函數?

函數(Function) 是一組執行特定任務的可重用代碼塊。

它們可以接受輸入引數,進行處理,並返回結果。函數有助於將代碼模塊化,提升代碼的可讀性和可維護性。

為什麼要使用函數?

  • 代碼重用:避免重複編寫相同的代碼。
  • 提高可讀性:將代碼邏輯分解為獨立的函數,結構更清晰。
  • 易於維護:修改函數內部實現,不影響調用函數的代碼。
  • 抽象:隱藏實現細節,提供簡潔的接口。

定義函數

在 Python 中,可以使用 def 關鍵字來定義函數。

語法:

def 函數名(引數列表):
    """文檔字串(可選)"""
    函數體
    return 返回值(可選)

示例:

def greet():
    """簡單的問候函數"""
    print("Hello, World!")

函數的調用

定義函數後,可以通過函數名加括號來調用它。

示例:

greet()  # 輸出:Hello, World!

函數引數

函數可以接受引數,以提高其靈活性。

Python 支持多種引數傳遞方式。

位置引數

按照位置順序傳遞的引數。

示例:

def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 輸出:8

關鍵字引數

使用引數名稱進行傳遞,順序可以不一致。

示例:

def add(a, b):
    return a + b

result = add(b=5, a=3)
print(result)  # 輸出:8

默認引數

為引數提供默認值,調用時可以省略該引數。

示例:

def greet(name="Guest"):
    print(f"Hello, {name}!")

greet()          # 輸出:Hello, Guest!
greet("Alice")   # 輸出:Hello, Alice!

可變引數(*args, **kwargs

  • *args:接收多個「位置引數」,並將其放入一個元組中。
  • **kwargs:接收多個「關鍵字引數」,並將其放入一個字典中。

示例:

def func(*args, **kwargs):
    print("位置引數:", args)
    print("關鍵字引數:", kwargs)

func(1, 2, 3, a=4, b=5)
# 輸出:
# 位置引數: (1, 2, 3)
# 關鍵字引數: {'a': 4, 'b': 5}

函數的返回值

函數可以使用 return 關鍵字返回結果。如果沒有 return 語句,函數默認返回 None

示例:

def square(x):
    return x * x

result = square(4)
print(result)  # 輸出:16

返回多個值:

def get_position():
    x = 10
    y = 20
    return x, y

pos = get_position()
print(pos)  # 輸出:(10, 20)

作用域與命名空間

  • 局部作用域(Local Scope):函數內部定義的變量,只在函數內部可見。
  • 全局作用域(Global Scope):函數外部定義的變量,整個模塊中都可見。
  • global 關鍵字:在函數內部修改全局變量。

示例:

x = 10  # 全局變量

def modify():
    global x
    x = 20  # 修改全局變量

modify()
print(x)  # 輸出:20

匿名函數(Lambda 函數)

Lambda 函數 是一種簡單的匿名函數,使用 lambda 關鍵字定義。

語法:

lambda 引數列表: 表達式

示例:

square = lambda x: x * x
print(square(5))  # 輸出:25

在高階函數中使用:

numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x * x, numbers))
print(squares)  # 輸出:[1, 4, 9, 16, 25]

高階函數

高階函數 是指接收函數作為引數或返回函數作為結果的函數。

map() 函數

對可迭代物件中的每個元素應用函數,返回一個迭代器。

示例:

numbers = [1, 2, 3, 4, 5]
doubles = list(map(lambda x: x * 2, numbers))
print(doubles)  # 輸出:[2, 4, 6, 8, 10]

filter() 函數

使用函數過濾可迭代物件中的元素,返回一個迭代器。

示例:

numbers = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)  # 輸出:[2, 4]

reduce() 函數

對可迭代物件中的元素進行累積計算,需從 functools 模塊導入。

示例:

from functools import reduce

numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 輸出:120

函數的文檔字串(Docstring)

使用三引號字符串在函數內部添加文檔字串,描述函數的功能。

示例:

def greet(name):
    """這是一個問候函數"""
    print(f"Hello, {name}!")

print(greet.__doc__)  # 輸出:這是一個問候函數

遞歸函數

遞歸函數 是指在函數內部調用自身的函數,適用於解決分解為相似子問題的問題。

示例:計算階乘

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 輸出:120

注意:

  • 遞歸需要有終止條件,否則會導致堆棧溢出。
  • 遞歸深度不宜過深,可能超過 Python 的遞歸深度限制。

總結

  • 函數 是可重用的代碼塊,用於實現特定的功能。
  • 定義函數:使用 def 關鍵字,後跟函數名和引數列表。
  • 函數引數:支持位置引數、關鍵字引數、默認引數和可變引數。
  • 返回值:使用 return 返回結果,沒有 return 時返回 None
  • 作用域:變量的可見範圍,由其定義的位置決定。
  • 匿名函數:使用 lambda 關鍵字定義簡單的函數,常用於高階函數中。
  • 高階函數:接收函數作為引數或返回函數作為結果的函數,如 map()filter()reduce()
  • 遞歸函數:在函數內部調用自身,需要注意終止條件。

透過理解和掌握函數的使用,您可以編寫出結構清晰、可維護性高的代碼,為您的編程之旅打下堅實的基礎。


延伸閱讀

Similar Posts