Python 中的函數

Python 中的函數

本文介紹了 Python 中的函數。

YouTube Video

Python 中的函數

Python 中的函數是定義可重用代碼塊的重要功能,它允許您按需調用,從而組織和簡化程序。使用函數可以提高代碼可讀性並遵循 DRY 原則(不要重複自己,即避免多次編寫相同代碼)。

定義函數

函數是使用 def 關鍵字定義的。基本語法如下:。

1def function_name(arg1, arg2, ..., argN):
2    """docstring (A brief description of the function)"""
3    processing
4    return return_value

例如,若要定義一個將兩個數相加的函數,您可以這樣編寫:。

1def add(x, y):
2    """A function that adds two numbers and returns the result"""
3    return x + y

調用函數

定義好的函數可以按以下方式調用並使用:。

1result = add(3, 4)
2print(result)  # Output: 7

函數的組成部分

  1. 函式名稱

    • 函式的名稱,用於呼叫時使用。
  2. 引數(參數)

    • 在呼叫時接收傳入資料的變數名稱。您可以定義零個或多個參數。
  3. 文件字串(Docstring)

    • 描述函式用途與使用方式的字串。可選。
  4. 函式主體

    • 撰寫函式執行內容的縮排區塊。
  5. 回傳值

    • 透過 return 陳述式傳回給呼叫者的值。如果省略 return,則默認返回 None

參數的類型

在 Python 中,有幾種類型的參數。

  1. 位置引數
    • 傳遞引數給函式的常見方式。
  2. 預設引數
    • 給引數指定預設值,使呼叫函式時可以省略。
1def greet(name, message="Hello"):
2    print(f"{message}, {name}")
3
4greet("Alice")  # "Hello, Alice"
5greet("Bob", "Good morning")  # "Good morning, Bob"
  1. 可變長度引數
    • args 以元組(tuple)接收多個位置引數,kwargs 則以字典(dictionary)接收。
1def func(*args, **kwargs):
2    print("args:", args)
3    print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}

通過正確使用函式,您可以更有效率地編寫 Python 程式。

Python 中的 Lambda 函式

在 Python 中,lambda 函式用於定義匿名且簡潔的函式。與使用 def 關鍵字定義的普通函式不同,lambda 允許您創建簡短的單行函式。在這裡,我們將詳細說明 Python 中的 lambda 函式。

lambda 函式的基礎知識

lambda 函式,也稱為匿名函式,用來定義沒有名稱的臨時函式,顧名思義。基本語法如下:。

1lambda arguments: expression
  • arguments
    • 指定函式的引數。可以指定多個引數,並用逗號分隔。
  • expression
    • 根據引數運算評估的運算式。表達式的計算結果成為函式的返回值。

例如,以下程式碼定義並執行了一個用於相加兩個數字的 lambda 函式。

1add = lambda x, y: x + y
2print(add(5, 3))  # Output: 8

在這個範例中,lambda x, y: x + y 是一個 lambda 函式,接受兩個引數 xy,並返回它們的總和。

lambda 函式的使用場景

lambda 函式適用於需要臨時定義簡單函式的場景。它們在以下情況中特別常見:。

  1. 作為函式的引數傳遞時

    • 當傳遞簡短的臨時函式時,它在高階函式(以其他函式作為參數的函式)中很有用。
  2. 為列表的排序鍵指定條件時

    • 它們適合用於函式如 sort()sorted() 中指定排序條件(鍵)。

在高階函式中的範例使用

高階函式的典型範例包括 map()filter()reduce()。這些函式將其他函式作為引數並應用於如列表等序列。

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

在這個範例中,一個 lambda 函式被傳遞給 map() 函式,用來計算列表中每個數字的平方。

使用列表排序的示例

lambda 函式有時可以用於在排序列表時指定自定義的鍵。例如,以下程式碼根據元組的第二個元素對列表進行排序。

1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

在此示例中,使用 lambda 函式根據元組的第二個元素(一個字串)進行排序。

filter()lambda

filter() 函式用於根據給定條件篩選列表(或其他可迭代物件)中的元素。

1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers)  # Output: [2, 4, 6, 8]

在此示例中,篩選出列表中的偶數來創建新列表。

lambdareduce()

reduce() 函式用於將列表縮減為單一值。可以使用 lambda 函式輕鬆實現。

1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product)  # Output: 120

在此示例中,將列表中的所有元素相乘以生成結果。

避免使用複雜的 lambda 函式

lambda 函式的優勢在於簡潔,但用於實現複雜邏輯時會變得難以閱讀。因此,適合將其用於可以用一行表示的簡單操作。對於複雜操作,使用 def 定義函式更具可讀性和可維護性。

例如,應避免使用如下所示的複雜 lambda 函式。

1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)

在此情況下,更應使用如下所示的 def 定義函式。

1def complex_func(x, y):
2    if x > y:
3        return x * 2 + y
4    else:
5        return x + y * 2

結論

Python 的 lambda 函式是定義臨時短函式的便利工具。它們通常用於高階函式或列表操作中,簡潔地定義特定條件。然而,lambda 函式應限於簡單任務,對於複雜邏輯應更傾向使用 def 函式。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video