首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Python 函數完整指南:定義、呼叫、Lambda 與裝飾器

     編輯:Java 相關知識

函數基礎:def 語句

Python 用 def 定義函數,運行時創建函數對象並賦值給變量名。語法:

def function_name(param1, param2, ...):
    statements
    return expression  # 可選,默認返回 None

def 是可執行語句

不同於編譯型語言,def 在運行時才執行,可動態定義函數:

if debug:
    def log(msg): print("DEBUG:", msg)
else:
    def log(msg): pass  # 無操作

函數對象特性

  • 第一級對象:可賦值、傳參、存入數據結構、返回。
  • 屬性附加:func.attr = value 可攜帶狀態,生命週期長於調用。
  • 內省:func.__name__, func.__code__.co_varnames 等獲取元信息。

間接調用範例

def echo(msg): print(msg)
x = echo
x("間接調用")  # 輸出: 間接調用

def indirect(func, arg): func(arg)
indirect(echo, "參數調用")  # 輸出: 參數調用

schedule = [(echo, "任務1"), (echo, "任務2")]
for func, arg in schedule: func(arg)  # 表驅動編程

參數與返回值機制

多態性

Python 函數參數無類型聲明,同一函數可處理不同類型:

def times(x, y): return x * y
times(2, 4)        # 8
times("Ni", 4)     # "NiNiNiNi"

默認參數陷阱

def bad_append(item, lst=[]):  # 危險:默認列表只初始化一次
    lst.append(item)
    return lst

def good_append(item, lst=None):
    if lst is None: lst = []
    lst.append(item)
    return lst

Lambda 表達式(匿名函數)

語法:lambda args: expression。主體只能是單一表達式,適用於簡短回調:

f = lambda x, y, z: x + y + z
f(2, 3, 4)  # 9

# 跳轉表
actions = [lambda x: x**2, lambda x: x**3, lambda x: x**4]
for func in actions: print(func(2))  # 4, 8, 16

# 字典分發
key = 'got'
{'already': lambda: 2+2, 'got': lambda: 2*4}[key]()  # 8

函數式編程工具:map、filter、reduce

counters = [1, 2, 3, 4]
list(map(lambda x: x+10, counters))      # [11, 12, 13, 14]
list(filter(lambda x: x > 0, range(-5,5))) # [1, 2, 3, 4]

from functools import reduce
reduce(lambda x, y: x+y, [1,2,3,4])  # 10
reduce(lambda x, y: x*y, [1,2,3,4])  # 24

生成器與 yield

包含 yield 的函數是生成器函數,調用返回迭代器,逐次產出值:

def gen(n):
    for i in range(n):
        yield i * i

g = gen(3)
next(g)  # 0
next(g)  # 1
list(gen(3))  # [0, 1, 4]

裝飾器:函數增強模式

def decorator(func):
    def wrapper(*args, **kwargs):
        print("前置邏輯")
        result = func(*args, **kwargs)
        print("後置邏輯")
        return result
    return wrapper

@decorator
def greet(name):
    print(f"Hello, {name}")

greet("World")
# 輸出:
# 前置邏輯
# Hello, World
# 後置邏輯

函數設計原則

  • 單一職責:每個函數只做一件事。
  • 低耦合:參數傳入、返回值輸出,少用全局變量。
  • 不可變參數:避免修改可變參數(除非明確文檔說明)。
  • 適當大小:函數體不宜過長,利於測試與復用。

總結

Python 函數是靈活的第一級對象,支援多態、閉包、裝飾器等高級特性。掌握 def/lambda、參數綁定機制、生成器與函數式工具,能編寫更優雅、可維護的代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved