首頁 > 後端開發 > Python教學 > Python 教程 - 函數

Python 教程 - 函數

DDD
發布: 2025-01-06 13:52:40
原創
246 人瀏覽過

介紹

函數是一個包含指令的可呼叫單元,旨在減少程式碼重複並組織複雜的任務。有兩種類型:void 函數(無返回值)和有返回值的函數。

這是Python中函數的基本結構。

def function_name(args):
    function body
登入後複製
登入後複製
登入後複製

這是 Python 中 void 函數(無回傳值)的範例。

# create a function
def hello():
    print("hello!")

# call the function
hello()
登入後複製
登入後複製
登入後複製

輸出

hello!
登入後複製
登入後複製
登入後複製

基於上面的程式碼,建立了名為 hello() 的函數。透過指定函數名稱後面跟著括號 () 來呼叫函數。

這是一個有回傳值的函數範例。

# create a function with return value
def add(a,b):
    return a + b

result = add(2,4)

print(result)
登入後複製
登入後複製
登入後複製

輸出

6
登入後複製
登入後複製
登入後複製

基於上面的程式碼,創建了名為 add() 的函數來對兩個數字求和。 add() 函數的回傳值儲存在 result 變數中。

使用傳回值函數時,請確保使用傳回值。

參數和關鍵字參數

Python 中的函數可以動態地接受多個參數。有兩種方法可以在函數中實現多個參數:

  • 參數:多個參數在函數中實現,無需指定關鍵字。參數可以使用 *args.

  • 來實現
  • 關鍵字參數:多個參數在具有指定關鍵字的函數中實作。關鍵字參數可以使用 **kwargs 來實作。

參數和關鍵字參數都必須位於函數中參數定義的最後位置。

這是使用參數方法動態計算數字總和的多個參數實現的範例。

def sum(*args):
    result = 0
    for arg in args:
        result += arg
    return result

print(sum(1,2))
print(sum(1,2,3))
print(sum(1,2,3,4,5,4,3,2))
登入後複製
登入後複製
登入後複製

輸出

3
6
24
登入後複製
登入後複製
登入後複製

基於上面的程式碼,可以使用不同數量的參數來呼叫 sum() 函數。

這是使用關鍵字參數方法實作多個參數的範例。

def display_info(name,**kwargs):
    print("========")
    print(f"name: {name}")
    print("other informations")
    for k, val in kwargs.items():
        print(f"{k}: {val}")
    print("========")

display_info("john",job="programmer",company="acme inc")
display_info("doe",job="programmer",company="acme inc",skills="go,java,php")
登入後複製
登入後複製

輸出

========
name: john
other informations
job: programmer
company: acme inc
========
========
name: doe
other informations
job: programmer
company: acme inc
skills: go,java,php
========
登入後複製
登入後複製

基於上面的程式碼,可以使用不同數量的參數來呼叫display_info()函數。透過使用**kwargs,可以用關鍵字定義參數。

參數和關鍵字參數可以一起使用。這是一個例子。

def display(*args,**kwargs):
    print("===========")
    print("items")
    for arg in args:
        print(arg)
    print("other information")
    for k, val in kwargs.items():
        print(f"{k}: {val}")
    print("===========")

display("apple","coffee","milk",payment="cash")
display("TV","Camera",payment="cash",delivery="express")
登入後複製
登入後複製

輸出

===========
items
apple
coffee
milk
other information
payment: cash
===========
===========
items
TV
Camera
other information
payment: cash
delivery: express
===========
登入後複製
登入後複製

遞迴函數

遞歸函數是在完成任務時呼叫自身的函數。遞歸函數可以解決很多問題,包括階乘數、斐波那契數列等等。

遞歸函數有兩個主要組成:

  • 基本情況:基本情況定義函數何時停止。
  • 遞迴關係:遞迴關係定義了函數的遞迴過程。

在此範例中,階乘計算是使用遞歸函數實現的。

def function_name(args):
    function body
登入後複製
登入後複製
登入後複製

輸出

# create a function
def hello():
    print("hello!")

# call the function
hello()
登入後複製
登入後複製
登入後複製

讓我們仔細看看階乘()函數。此函數涉及兩個組件:

  • 基本情況:如果 n 的值等於 0 或 1,則函數執行終止。

  • 遞迴關係:當n大於1時函數執行。

hello!
登入後複製
登入後複製
登入後複製

factorial() 函數如下圖所示。

Python Tutorial - unction

拉姆達

lambda 是匿名函數。 lambda 可以包含許多參數,就像一般的函數一樣。 lambda 函數適合建立直接回傳值的小函數。

這是 sum() 函數的範例。

# create a function with return value
def add(a,b):
    return a + b

result = add(2,4)

print(result)
登入後複製
登入後複製
登入後複製

這是 lambda 函數對兩個數字求和的範例。 lambda 函數儲存在名為 sum_func 的變數中。

6
登入後複製
登入後複製
登入後複製

要使用 lambda 函數,請透過變數名稱呼叫函數。

def sum(*args):
    result = 0
    for arg in args:
        result += arg
    return result

print(sum(1,2))
print(sum(1,2,3))
print(sum(1,2,3,4,5,4,3,2))
登入後複製
登入後複製
登入後複製

地圖和濾鏡

地圖功能

map() 函數為清單中的每個項目執行提供的回呼函數。

這是 map() 函數將每個數字乘以 3 的範例。

3
6
24
登入後複製
登入後複製
登入後複製

輸出

def display_info(name,**kwargs):
    print("========")
    print(f"name: {name}")
    print("other informations")
    for k, val in kwargs.items():
        print(f"{k}: {val}")
    print("========")

display_info("john",job="programmer",company="acme inc")
display_info("doe",job="programmer",company="acme inc",skills="go,java,php")
登入後複製
登入後複製

基於上面的程式碼,triple()函數充當map()函數的回調,這意味著為數字列表中的每個項目呼叫triple()函數。然後,map() 函數的結果被轉換為列表,然後儲存在名為 result 的變數中。

上面的範例可以使用 lambda 函數來簡化。

========
name: john
other informations
job: programmer
company: acme inc
========
========
name: doe
other informations
job: programmer
company: acme inc
skills: go,java,php
========
登入後複製
登入後複製

輸出

def display(*args,**kwargs):
    print("===========")
    print("items")
    for arg in args:
        print(arg)
    print("other information")
    for k, val in kwargs.items():
        print(f"{k}: {val}")
    print("===========")

display("apple","coffee","milk",payment="cash")
display("TV","Camera",payment="cash",delivery="express")
登入後複製
登入後複製

過濾功能

filter() 函數根據給定的回呼函數選擇清單中的項目。 filter() 函數適合使用提供的回呼函數過濾清單中的項目。 filter() 函數需要一個傳回布林值的回呼函數。

這是 filter() 函數只選取清單中偶數的範例。

===========
items
apple
coffee
milk
other information
payment: cash
===========
===========
items
TV
Camera
other information
payment: cash
delivery: express
===========
登入後複製
登入後複製

輸出

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

# call the function
result = factorial(5)

print(result)
登入後複製

基於上面的程式碼,filter()函數使用is_even()作為回呼函數從列表中選擇偶數。

可以使用 lambda 函數簡化此範例。

120
登入後複製

輸出

def function_name(args):
    function body
登入後複製
登入後複製
登入後複製

範例 - 刪除重複程式碼

此功能可用於刪除重複程式碼。例如,有兩個函數,稱為register()和login()。這兩個函數都使用驗證過程。

# create a function
def hello():
    print("hello!")

# call the function
hello()
登入後複製
登入後複製
登入後複製

驗證過程有重複的程式碼。若要刪除這些重複項,可以將驗證過程包裝在單獨的函數中。

hello!
登入後複製
登入後複製
登入後複製

validate()函數可以在register()和login()函數內部使用。

# create a function with return value
def add(a,b):
    return a + b

result = add(2,4)

print(result)
登入後複製
登入後複製
登入後複製

基於上面的程式碼,程式碼更乾淨,更容易修改,因為如果更新額外的驗證規則,可以在一個地方(validate()函數內部)更新驗證規則。

尖端

這些是在 Python 中使用函數時的關鍵技巧。

  • 函數必須完成單一任務。如果需要多個任務,請為其他任務建立一個單獨的函數。

  • 函數參數的最大數量為 3。如果參數看起來超過 3,請考慮為函數參數使用專用資料物件。

函數參數的最大數量似乎有爭議。

這是使用參數的 create_account() 函數的範例。

6
登入後複製
登入後複製
登入後複製

可以修改 create_account() 函數以使用資料物件來獲得更簡潔的程式碼。

def sum(*args):
    result = 0
    for arg in args:
        result += arg
    return result

print(sum(1,2))
print(sum(1,2,3))
print(sum(1,2,3,4,5,4,3,2))
登入後複製
登入後複製
登入後複製
  • 使用文件來解釋功能描述。可以使用“””語法新增文件。

這是在函數內使用文件的範例。

3
6
24
登入後複製
登入後複製
登入後複製

來源

  • 函數中的參數與關鍵字參數
  • 遞歸函數圖解

希望這篇文章對你學習Python有幫助。如果您有任何意見,請在評論區告訴我。

以上是Python 教程 - 函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板